.net NuGet自动包还原为库带来问题
使用版本2.7中添加的NuGet自动软件包还原时,NuGet会自动将任何丢失的软件包下载到位于解决方案级别的packages\文件夹中。当解决方案包含库(即git子树或git子模块)时,这会导致问题,因为库项目希望将包下载到其各自解决方案文件夹中的包文件夹中(通常作为主代码的解决方案文件夹中的子文件夹嵌套)并且不知道在主代码的解决方案文件夹中查找包。例如:.net NuGet自动包还原为库带来问题,.net,visual-studio-2012,nuget,git-submodules,git-subtree,.net,Visual Studio 2012,Nuget,Git Submodules,Git Subtree,使用版本2.7中添加的NuGet自动软件包还原时,NuGet会自动将任何丢失的软件包下载到位于解决方案级别的packages\文件夹中。当解决方案包含库(即git子树或git子模块)时,这会导致问题,因为库项目希望将包下载到其各自解决方案文件夹中的包文件夹中(通常作为主代码的解决方案文件夹中的子文件夹嵌套)并且不知道在主代码的解决方案文件夹中查找包。例如: primary_code_folder\ ->primary_code.sln ->packages\ [various
primary_code_folder\
->primary_code.sln
->packages\
[various packages downloaded by NuGet]
->primary_code_project\
->library_solution_folder\
--->library_code.sln
--->packages\
[where the library project expects packages to reside]
--->library_code_project\
对此的潜在解决方案:
nuget.exe restore library\u code.sln
。但是,nuget.exe不自然地位于解决方案中,并且(默认情况下)不位于路径变量中。因此,似乎将nuget.exe复制到项目中可能会导致以后的不兼容性,因为更新不会被引入。也许有一个解决办法任何人都可以分享他们是如何处理这个问题的吗?这里针对不同的情况问了一个类似的问题(),答案不满足我在本文中描述的需求。这可以通过在每个文件夹位置放置多个nuget.config文件来实现,其中存在sln 在nuget.config中,您需要添加以下内容
<config>
<add key="repositoryPath" value="C:\Temp" />
</config>
几个月前,我遇到了一个类似的问题,最后完成了一个类似于您的解决方案3的msbuild任务,因为我找不到更好的解决方案。问题在于,包还原是Visual Studio的一项功能,即如果您尝试非从原始解决方案或使用msbuild命令行生成内容,则不会执行该功能。谢谢。我想知道包还原是否是Visual Studio的一部分。这个工作流的一个挑战是,我们已经使用git子树添加了库项目,并且正在积极地编辑它。因此,如果我们对破坏构建的库进行更改,该错误不会在IDE中正确显示,因为在Visual Studio尝试编译主代码解决方案之前,msbuild任务将失败。我尚未了解的是您当前和所需的工作流是什么:您是单独生成库和主代码,还是要一步生成一切。如果是,是否必须在VS中执行此操作?您是否控制了所有项目,即更改库解决方案是否可以接受?我们希望在VS中一步构建所有内容。我们控制所有内容,因此我们可以修改库解决方案。然而,我们在多个repo的多个VS解决方案中使用这个库(总是作为git子树,所以我们主动地从每个主代码repo推/拉库repo)。在应用程序解决方案中是否包含库的项目(而不是解决方案)?因为否则,无论如何,您都需要在应用程序之前执行一些单独的步骤来构建库(您可以在其中注入恢复包)。
<config>
<add key="repositoryPath" value="..\..\.." />
</config>