gpt4 book ai didi

docker - Docker构建一个.net核心应用程序,该应用程序引用不同文件夹中的项目

转载 作者:行者123 更新时间:2023-12-02 20:00:12 24 4
gpt4 key购买 nike

我正在尝试编写一个构建.NET Core 2.2控制台应用程序project-microservice-logger.csproj的Dockerfile。我遇到一些构建错误,我相信这是因为我要构建的Dockerfile位于包含project-microservice-logger.csproj的目录中

但是该项目对位于不同目录中的项目有一些引用。

/company/project-common/project-common-database/project-common-database.csproj
/company/project-microservices/project-microservice-logger/project-microservice-logger.csproj

当我发出命令时,在 /company/project-microservices/project-microservice-logger目录中,出现类似以下错误

The type or namespace name 'Common' does not exist in the namespace



因为我可以很好地构建它,所以我知道它具有某些东西,这是由于Dockers构建上下文所致,并且找不到文件。

我的Docker文件没什么特别的,本质上只是从一些在线可用的.NET Core Docker模板中获取的。
FROM microsoft/dotnet:2.2-sdk AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/dotnet:2.2-runtime
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "logging.dll"]

如果它对于将来的持续部署情况是一个更好的解决方案,那么我愿意对我们如何进行项目引用进行更改。

所有代码都在一个存储库中,但目前分为不同的解决方案(核心,微服务和Web)

版本
.NET Core 2.2
Docker for Mac /版本2.0.0.2

最佳答案

我将publish逻辑放入 shell 脚本中,并且docker镜像使用从中构建的文件作为其代码库。

该脚本采用以下文件夹结构:

Solution-Folder/build/this-build-script.sh
Solution-Folder/MyProject/MyProjectName.csproj


BUILD_MODE="Release"
DOCKER_IMAGE_TAG="latest"

readonly BUILD_MODE
readonly DOCKER_IMAGE_TAG

publish_and_build_image()
{
PROJECT_DIR=$1
PROJECT_FILE_NAME=$2
DOCKER_IMAGE_NAME=$3

echo "Publishing project $PROJECT_FILE_NAME ..."
echo
dotnet publish "..\\$PROJECT_DIR\\$PROJECT_FILE_NAME" --configuration $BUILD_MODE --verbosity quiet

echo "Building docker image $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG ..."
docker build --tag=$DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG "../$PROJECT_DIR" --quiet

#echo
#echo -e "\033[32m $DOCKER_IMAGE_NAME:$DOCKER_IMAGE_TAG built \033[0m"
}

publish_and_build_image "MyProject" "MyProjectName.csproj" "my-docker-img-name"

关于docker - Docker构建一个.net核心应用程序,该应用程序引用不同文件夹中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54357913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com