如何在.Net核心项目中使用Azure工件源创建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

在.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/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配置正确!