如何在.Net核心项目中使用Azure工件源创建docker映像
在.Net core web api应用程序上创建docker映像时遇到问题。这是VS docker support生成的docker映像:如何在.Net核心项目中使用Azure工件源创建docker映像,docker,.net-core,dockerfile,docker-image,azure-artifacts,Docker,.net Core,Dockerfile,Docker Image,Azure Artifacts,在.Net core web api应用程序上创建docker映像时遇到问题。这是VS docker support生成的docker映像: FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base WORKDIR /app EXPOSE 80 FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build WORKDIR /src COPY ["src/appn
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY ["src/appname.Api/appname.Api.csproj", "src/appname.Api/"]
COPY ["src/appname.Data/appname.Data.csproj", "src/appname.Data/"]
COPY ["src/Eappname.Models/appname.Models.csproj", "src/appname.Models/"]
RUN dotnet restore "src/appname.Api/appname.Api.csproj"
COPY . .
WORKDIR "/src/src/appname.Api"
RUN dotnet build "appname.Api.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "appname.Api.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "appname.Api.dll"]
不幸的是,我在我的应用程序中使用了Azure Artifacts Feed包,但此图像不起作用。我做了一些研究,并尝试将凭据提供程序与nuget配置文件一起使用。如下图所示:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-stretch AS build
WORKDIR /src
COPY NuGet.Config ./
COPY ["src/appname.Api/appname.Api.csproj", "src/appname.Api/"]
COPY ["src/appname.Data/appname.Data.csproj", "src/appname.Data/"]
COPY ["src/appname.Models/appname.Models.csproj", "src/appname.Models/"]
RUN dotnet restore --configfile NuGet.Config "src/appname.Api/appname.Api.csproj"
COPY . .
WORKDIR "/src/src/appname.Api"
RUN dotnet build "appname.Api.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "appname.Api.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "appname.Api.dll"]
还添加了Nuget.Config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="BredasVSTS" value="https://pkgs.dev.azure.com/feed/nuget/v3/index.json" />
</packageSources>
<packageSourceCredentials>
<BredasVSTS>
<add key="Username" value="<usernameWithEmail>" />
<add key="ClearTextPassword" value="<token>" />
</BredasVSTS>
</packageSourceCredentials>
</configuration>
有什么办法可以解决这个问题吗
错误:/bin/sh:2:cd:无法将cd复制到未定义
根据错误MSB3073:command“cd”undefined”“
,您似乎正在xxx.Api
项目中使用命令行或生成事件cd$(SolutionDir)
使用dockerfile在没有解决方案文件.sln
的情况下生成项目文件.csproj
时,它无法获取基于.sln
文件的$(SolutionDir)
的值
因此将出现错误“cd”未定义,要解决此问题,您可以尝试用项目文件中的$(ProjectDir)
替换所有$(SolutionDir)
作为测试,我使用构建事件创建了一个示例:
CD $(SolutionDir)
然后我得到了同样的错误:
为了解决这个问题,我用$(ProjectDir)\
替换了$(SolutionDir)
,然后构建它,它可以正常工作:
有关更多详细信息,请查看
希望这有帮助。是的,我之前就知道了,但是你的答案很完美,谢谢!我希望这个问题能帮助那些想在dockerfile中使用Azure工件的人,因为dockerfile和Nuget.Config配置正确!