Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net NuGet自动包还原为库带来问题_.net_Visual Studio 2012_Nuget_Git Submodules_Git Subtree - Fatal编程技术网

.net NuGet自动包还原为库带来问题

.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

使用版本2.7中添加的NuGet自动软件包还原时,NuGet会自动将任何丢失的软件包下载到位于解决方案级别的packages\文件夹中。当解决方案包含库(即git子树或git子模块)时,这会导致问题,因为库项目希望将包下载到其各自解决方案文件夹中的包文件夹中(通常作为主代码的解决方案文件夹中的子文件夹嵌套)并且不知道在主代码的解决方案文件夹中查找包。例如:

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\
对此的潜在解决方案:

  • 手动打开每个library project.sln文件并生成该项目,以确保在每个library软件包文件夹中还原最新的软件包。这是不可取的,因为它要求每个开发人员在每次有人更新/安装新包时都要记住这样做
  • 以某种方式将每个库配置为也可以查看主解决方案代码中的packages文件夹。这似乎是一个非常不受欢迎的修复程序,因为它修改了库的代码,使其对于所使用的给定项目是唯一的
  • 将主代码的解决方案配置为在预生成事件命令行命令中运行
    nuget.exe restore library\u code.sln
    。但是,nuget.exe不自然地位于解决方案中,并且(默认情况下)不位于路径变量中。因此,似乎将nuget.exe复制到项目中可能会导致以后的不兼容性,因为更新不会被引入。也许有一个解决办法
  • 以某种方式将NuGet配置为在项目级别而不是解决方案级别存储包

  • 任何人都可以分享他们是如何处理这个问题的吗?这里针对不同的情况问了一个类似的问题(),答案不满足我在本文中描述的需求。

    这可以通过在每个文件夹位置放置多个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>