rmz*_*k 1 9 c# visual-studio nuget docker
我正在尝试在容器技术上启动我的.net核心web api.使用泊坞窗.
环境= Windows 10,Visual Studio
Docker版本:
客户:
版本:17.12.0-ce
API版本:1.35
转到版本:go1.9.2
Git commit:c97c6d6
建造:2017年12月27日星期三20:05:22
OS/Arch:windows/amd64
服务器:
发动机:
版本:17.12.0-ce
API版本:1.35(最低版本1.12)
转到版本:go1.9.2
Git commit:c97c6d6
建造:2017年12月27日星期三20:12:29
OS/Arch:linux/amd64
实验:是的
我的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="Private" 
value="http://My_Private_Nuget_Server" />
</packageSources>
<packageRestore>
<add key="enabled" value="True" />
<add key="automatic" value="True" />
</packageRestore>
<bindingRedirects>
<add key="skip" value="False" />
</bindingRedirects>
<packageManagement>
<add key="format" value="0" />
<add key="disabled" value="True" />
</packageManagement>
<apikeys>
<add key="https://www.nuget.org" value="Some_Long_Value" />
</apikeys>
<disabledPackageSources />
</configuration>
我的Dockerfile:
FROM microsoft/aspnetcore-build:2.0 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/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "MailAlertWebApiWithEF.dll"]
我在Windows 10机器上使用Linux Container.我在Visual Studio 17上有.net核心项目.当添加docker支持并从VS 17运行时,一切正常.API在容器内站起来.但是当我关闭VS时不起作用.但是当ı尝试自定义我的dockerfile以使我的图像和容器独立于VS. 由于私有而导致错误.dll.
在我的项目中我有一个.dll  来自我的私人nuget服务器.当我尝试没有我的私人.dllı可以创建图像.但是需要那个.dll.Docker给我这个错误:
MailAlertWebApiWithEF.csproj:错误NU1101:无法找到包WebApi.Utils.源中没有包含此id的包:nuget.org
我搜索了这个错误.问题的来源似乎是Nuget.Config文件.但它对我来说似乎很好,因为我可以在那里看到我的私人nuget服务器.当ı搜索解决方案箭头总是在Linux机器上,但ı使用Windows.
1-)因此,如果我可以使用VS 17启动我的项目,那么我的nuget.config文件格式正确.它可以看到我的私人nuget服务器.对?那为什么码头工人看不到呢?
请帮忙
Mar*_*ich 11
为了dotnet在容器内运行命令来查找自定义源,nuget.config还必须将该文件复制到容器中.
要执行此操作,请将nuget.config包含私有源的文件添加到项目文件夹,然后添加COPY将此文件复制到容器的其他步骤.
示例(Dockerfile):
WORKDIR ...
COPY NuGet.Config /
COPY ... ...
Par*_*dar 10
对于那些谁落在这里,因为他们使用私有仓库或定制的NuGet饲料和RUN DOTNET恢复 是失败的,那么这里就是你可以做什么:
仅在以下情况下适用:您的NuGet.Config包含私有存储库端点和凭据,然后
1)将系统的NuGet.Config复制到.csproject所在根目录下的项目文件夹中。
2)现在在docker文件中将这些语句放在您尝试恢复包之前:
COPY ./NuGet.Config ./
3)之后,将配置文件位置附加到dotnet restore命令中,如下所示:
RUN dotnet restore <CS_project_name>.csproj --configfile ./NuGet.Config
4)现在,做剩下的你想做的事情。
5)在入口点之前或复制到其他容器之前(如果是多阶段构建),最好删除NuGet.Config,因为我们不希望在pod /容器中看到它
RUN rm ./NuGet.Config
您可以通过 dotnet 命令添加私有 nuget,无需链接到 nuget.config 文件。
COPY *.csproj ./  
RUN dotnet nuget add source <source-value-of-nuget> -n <name> 
RUN dotnet restore 
Nuget.Config如果您的“私有 nuget feed”可通过 URL 访问,则可以将其复制到解决方案或项目文件夹。但是,如果私有源是用作 nuget 源的本地文件夹,则此方法仍然会失败,并显示该文件夹位于构建上下文之外的错误,或者仅仅是因为 Docker 构建过程未解析 Windows 路径。
例如,如果你Nuget.Config有这样的东西:
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="My Local" value="C:\dev\nuget-packages" />
  </packageSources>
Docker 上下文将无法解析C:\dev\nuget-packages
人们很容易放弃在 docker 中进行构建,而只是预先发布已编译的解决方案并从中构建映像......
但还可以使用另一种解决方法,需要更多步骤:在运行命令dotnet restore 之前docker-compose运行,并使用该--packages选项将恢复的包保存到解决方案文件夹,例如
dotnet-restore C:\slnfolder\myproj\myapp.csproj --packages C:\slnfolder\packages
(这可以与命令一起包装在单个 powershell 脚本中docker-compose。)
然后在 Dockerfile(用于docker-compose构建映像)中,假设上下文是解决方案文件夹并且WORKDIR是'/src'
COPY packages/. packages/.
并将 Dockerfile 恢复行修改为
RUN dotnet restore "myproj/myapp.csproj" -s /src/packages -s https://api.nuget.org/v3/index.json