Build 未在Azure DevOps版本中安装Nuget

Build 未在Azure DevOps版本中安装Nuget,build,msbuild,azure-devops,nuget,nuget-package-restore,Build,Msbuild,Azure Devops,Nuget,Nuget Package Restore,我试图停止将来自Nuget包的任何内容归档到代码源代码存储库中。对于大多数人来说,因为他们只有DLL,所以它是有效的。 我的问题是,我有一个Nuget,在nupkg中有一个Content文件夹。在使用VS2017构建时,所有内容都得到了正确安装,但在使用构建服务器(Azure DevOps管道)执行相同操作时,我得到了 根据功能,管道代理版本为v.2.122.1。 NuGet任务使用NuGet 3.3.0.212和MsBuild 14.0记录版本0.2.31 我在packages文件夹中看到了n

我试图停止将来自Nuget包的任何内容归档到代码源代码存储库中。对于大多数人来说,因为他们只有DLL,所以它是有效的。 我的问题是,我有一个Nuget,在nupkg中有一个
Content
文件夹。在使用VS2017构建时,所有内容都得到了正确安装,但在使用构建服务器(Azure DevOps管道)执行相同操作时,我得到了

根据功能,管道代理版本为v.2.122.1。 NuGet任务使用NuGet 3.3.0.212和MsBuild 14.0记录版本0.2.31

我在
packages
文件夹中看到了nupkg文件,但没有复制
Content
文件夹项

有什么特别的东西需要添加到我的csproj中,或者有什么额外的步骤需要添加到我的构建定义中吗

有什么特别的东西需要添加到我的csproj中,或者有什么额外的步骤需要添加到我的构建定义中吗

您需要更改csproj文件以链接内容包中的文件,而不是将文件添加到项目中。由于您正试图停止将来自Nuget包的任何内容归档到代码源存储库中,所以请将任务添加到构建定义中

作为测试,我创建了一个内容包,并添加了一个复制事件以从内容包复制文件:

  <ItemGroup>
    <Content Include="..\Packages\TestContentPackage.1.0.0\content\resources\Test.txt" />
    <Content Include="..\Packages\TestContentPackage.1.0.0\content\resources\Test2.txt" />
  </ItemGroup>

安装该软件包后,以下内容将添加到项目文件
.csproj
packages.config

.csproj:

  <ItemGroup>
    <Content Include="resources\Test.txt" />
    <Content Include="resources\Test2.txt" />
  </ItemGroup>
<packages>
  <package id="TestContentPackage" version="1.0.0" targetFramework="net461" />
</packages>
更改后,内容包中的文件不会添加到项目中,只需链接到项目:

为了验证copy命令,我在生成事件中添加了以下copy命令:

if not exist $(ProjectDir)TestFolder  mkdir $(ProjectDir)TestFolder
xcopy /y "$(SolutionDir)Packages\TestContentPackage.1.0.0\content\resources\Test2.txt" "$(ProjectDir)TestFolder"
在我的本地电脑上,一切都很好

然后,我使用Azure devops构建此项目,您需要添加nuget还原任务,否则,Visual Studio/MSBuild无法从包中找到文件。而且它也工作得很好

注意:如果要从内容文件夹复制文件,则需要从
packages
文件夹复制


希望这有帮助。

请阅读。您是否在VisualStudio构建步骤中使用了不推荐的Restore NuGet Packages复选框?“很遗憾”,我没有使用它。这就像nuget restore任务只恢复nupkg,而不安装它……虽然这肯定会起作用,但它忽略了nuget的要点,nuget应该在正确的位置自动部署正确的东西。这样做可能意味着每次更新NuGet或添加/删除NuGet时都必须这样做,因此无法使用。既然你在NuGet团队工作,你能帮我理解为什么VS正确地恢复和安装/部署NuGets而不是Azure管道任务吗?@bkqc,很抱歉回复太晚。区别在于,您正试图停止归档到代码源代码存储库中。因为nupkg中带有内容文件夹的Nuget会将文件添加到项目中,这将添加到源代码管理中。这不是你想要的。所以,我给你这个解决办法。如果您希望VS和Azure devops具有相同的行为,则必须将内容文件添加到源代码管理。感谢您的回复。不幸的是,这似乎是唯一的选择,因此,我将把它标记为答案。另一方面,不使用Nuget内容是没有意义的。我知道存储库中的文件应该优先于Nuget,但这并不妨碍管道完成完整的工作。我可以在哪里提交功能请求?
if not exist $(ProjectDir)TestFolder  mkdir $(ProjectDir)TestFolder
xcopy /y "$(SolutionDir)Packages\TestContentPackage.1.0.0\content\resources\Test2.txt" "$(ProjectDir)TestFolder"