Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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
Asp.net mvc 4 使用共享包目录和共享解决方案目录将NuGet集成到大型现有代码库中_Asp.net Mvc 4_Visual Studio 2012_Nuget - Fatal编程技术网

Asp.net mvc 4 使用共享包目录和共享解决方案目录将NuGet集成到大型现有代码库中

Asp.net mvc 4 使用共享包目录和共享解决方案目录将NuGet集成到大型现有代码库中,asp.net-mvc-4,visual-studio-2012,nuget,Asp.net Mvc 4,Visual Studio 2012,Nuget,Q:是否可能/可行,将多个解决方案存储在一个“解决方案”目录中,将多个NuGet软件包存储在另一个“软件包”目录中,并且所有内容都可以与不同的版本很好地配合使用? 更多详情 例如:我有两个项目。ProjectA需要Newstonsoft.Json.4.5.11,ProjectB需要Newstonsoft.Json.5.0.6 例如,我有一个解决方案文件。我需要所有的解决方案文件都在同一个目录中(这只是接下来的过程,一个目录中的所有解决方案都是依次构建的) 默认情况下,NuGet将在每个解决方案文

Q:是否可能/可行,将多个解决方案存储在一个“解决方案”目录中,将多个NuGet软件包存储在另一个“软件包”目录中,并且所有内容都可以与不同的版本很好地配合使用?

更多详情

例如:我有两个项目。ProjectA需要Newstonsoft.Json.4.5.11,ProjectB需要Newstonsoft.Json.5.0.6

例如,我有一个解决方案文件。我需要所有的解决方案文件都在同一个目录中(这只是接下来的过程,一个目录中的所有解决方案都是依次构建的)

默认情况下,NuGet将在每个解决方案文件旁边创建一个
目录

我创建了一个
nuget.config
文件,允许我将包存储在一个名为“SharedPackages”的目录中,答案如下:

如果我创建ProjectB,默认情况下它有Json.NET 4.5.11。如果我转到
管理解决方案的NuGet软件包
,我可以选择将其更新为5.0.6版。这很好,因为ProjectB需要更新的版本。更好的是,现在在我的
共享包
目录中,两个版本的Json.NET都有一个并排的目录,因此ProjectA可以使用旧版本

但是,现在我想将ProjectC创建为一个完整的MVC4 Web应用程序。对于JQuery,在VS2012中创建ASP.NET MVC4应用程序时,当前获得的版本是1.8.2。我还获得了淘汰赛2.2.0

我的过程是,删除默认的
目录,将新解决方案移动到现有
nuget.config
旁边的
解决方案
目录,并编辑新解决方案文件以更新新.csproj文件的相对路径。然后,当我构建时,NuGet Package Manager将我需要的额外包(ProjectA和ProjectB未使用的)恢复到
共享包
目录。然而。。。我得到构建错误,它无法解决一些引用,包括DotNetOpenAuth、webfeel、System.Spatial。。。引用指向
目录,而不是
共享包
目录

顺便提一下:如果我为解决方案启用包还原,那么默认情况下,它还会尝试将它们还原到
解决方案
目录中的
文件夹,而不是将它们还原到
共享包
目录

大约在这一点上,我意识到仅仅创建
nuget.config
文件对于ProjectA和ProjectB来说也是不够的,尽管它们看起来最初是工作的,.csproj中的引用。文件指向项目文件下的
bin
文件夹,而不是我的
SharedPackages
目录

因此,对于所有引用,我手动“查找并替换”
。\packages
。\..\SharedPackages
。我必须为ProjectA、ProjectB和ProjectC这样做。现在一切都正常运行了,新的包放到了正确的位置

现在,如果我回到ProjectA,添加淘汰包,这就是版本2.3.0。它与Project C使用的另一个淘汰包(版本为2.2.0)一起安装。这样做还将安装jQuery2.0.3以及jQuery1.8.2。到目前为止还不错

作为一个健全性检查,我创建了另一个Web应用程序—ProjectD,移动文件,更新解决方案和项目中的引用。这一次一切都是第一次构建的。我尝试在ProjectD中更新webfleep,看看它是否会保留ProjectC的旧版本。这会导致更多问题,它会将其安装到packages目录。webfleed似乎也有一个单独的配置设置
。。。它似乎无法恢复

然后我返回到ProjectB并尝试“全部更新”-看起来已经存在的文件在
SharedPackages
中更新,新版本目录与现有目录并排,但任何新的依赖项(例如,现在我有了对Owin.dll的引用)都会放在
packages
文件夹中:(如果我删除了ProjectB中的
packages
文件夹和
bin
文件夹,然后构建ProjectB解决方案,可以理解,我会得到构建错误,包在任何时候都不会自动恢复到
SharedPackages
目录

甚至可以将NuGet设置为更新解决方案旁边的
包以外的公共目录中的包吗?

只使用默认的
软件包
文件夹而不是
共享软件包
会更容易吗,还是我仍然会有问题?

这已经变成了太多的问题。为了尝试并保持它在范围内,有人尝试过类似的设置吗?他们克服了什么障碍,如何管理它,还是完全放弃了?如果放弃了,您最终如何使用NuGet在大量的代码库中管理包

我很欣赏这一点,这个问题在这个特定的问题上得到了很好的回答,但是这里的用例略有不同:。它也与这个问题几乎相同:,但我还是决定添加这个问题,因为这个问题更侧重于为不同的解决方案提供不同的配置,而在这里,我希望所有的软件包都放在一个地方,我只想实现它,看看它是否可行。而且我认为故障排除和研究时间可能对某些人有用

<settings>
    <repositoryPath>..\SharedPackages</repositoryPath>
</settings>
\Projects\ProjectA 
\Projects\ProjectB 
\Solutions 
\SharedPackages