[英]C# visual studio how to relocate nuget package folder?
我雇了一个承包商为我做一些编码。 他使用以下存储库路径在解决方案文件夹中设置nuget.config:
<configuration>
<solution>
<add key="disableSourceControlIntegration"
value="true" />
</solution>
<config>
<add key="repositoryPath"
value="../lib" />
</config>
</configuration>
我对他的决定不太满意:这会将nuget包文件夹放在解决方案文件夹之外。 我可以轻松更改存储库路径,只需设置:
value="../<mySolutionFolder>/lib" />
然而,当我这样做时,会发生一件奇怪的事情:我在解决方案中使用的每一个引用现在都被破坏了。 我在.csproj文件或其他* .config文件中更改的任何内容都不允许我的项目查找其引用。
唯一的解决方法是从头开始重新创建我的解决方案中的每个项目,并添加 - >现有项目等,并参考 - >管理nuget包,并再次安装每个参考。
我的解决方案中有很多项目,并且每个项目执行此项目都非常耗时。
我想知道是否有一个简单的方法?
似乎应该有一种方法让Nuget和VS很好地玩,这样我就可以轻松地将存储库文件夹移动到不同的路径位置。
修复引用路径的一种方法是使用程序包管理器控制台。
在程序包管理器控制台中,您可以运行以下命令来重新安装NuGet程序包,这将修复引用的提示路径。
Update-Package -reinstall
这将重新安装解决方案中的所有NuGet包。 我假设你有源代码控制下的代码,所以如果你需要在重新安装后还原它们,你可以看到对项目做了哪些更改。
有关在NuGet文档站点上重新安装NuGet包的更多文档。
解决此问题的另一种方法是在.csproj文件中执行查找和替换以修复提示路径。
当我在解决方案中移动实际文件夹时遇到了这个问题。 我通常使用VS代码查找/替换>..\\packages\\
并将其替换为>..\\..\\packages\\
。 这次我做了以下事情:
Update-Package -Reinstall
.csproj
文件: <Import Project="..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props" Condition="Exists('..\..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.8\build\net45\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props')" /> <Import Project="..\..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props" Condition="Exists('..\..\packages\Microsoft.Net.Compilers.2.4.0\build\Microsoft.Net.Compilers.props')" />
请注意 , <Import>
中有2个条件语句使用相对路径到..\\..\\packages
。
希望这些步骤能够帮助其他人。
Package.config用于从文件夹中的其他位置放置文件,当您通过Nuget在项目中添加内容时,最好不要异常上传包。
尝试将软件包复制到该文件夹(您设置的新路径),或者只需关闭项目,再次打开它,然后在转到管理项目参考后单击“还原”。
在尝试了这里发布的所有解决方案后,我无法逃避一个主要问题:对非nuget项目的引用,例如System
和System.Core
仍然无效(旁边列出黄色三角形)。 删除它们并添加它们并没有使它们再次有效。 进一步(众所周知)Visual Studio很糟糕,并说明为什么引用被认为是无效的原因。
因此,虽然Matt的解决方案确实重新定位了nuget
包文件夹,但解决方案并未处于工作状态。 此外,更新提示路径没有帮助,因为那些特定于nuget包。 我无法解释为什么基本的引用,如System
也变得无效。 也许从现在起一年阅读这篇文章的人可以留言并附上解释。
我最终做的是重建我的整个项目而没有nuget.config
文件(我删除了它)。 这会导致nuget
使用所有默认值。 下载的包存储在\\\\<solution_folder>\\packages\\
。 解决方案再次运行后,我添加了nuget.config
文件,但删除了以下内容:
<config>
<add key="repositoryPath"
value="../lib" />
</config>
...并删除该部分导致nuget依赖于默认行为,这正是我想要的(将包安装到\\ packages等)。
如果其他人即将付出这些费力的努力,我发现这个SO解决方案有助于将文件夹和文件从旧解决方案移动到新解决方案。
我设法做到了这个我自己的解决方案,却没有意识到如何(并最终得到了* .sln级别的一个包文件夹和另一个位于下面级别的那个) - 但我很确定现在这一切都与从使用包配置文件迁移到使用包引用的新方法。 如果您使用较新版本的visual studio(可能是您的承包商所做的)或通过NuGet中的按钮/推荐,或通过右键单击上下文菜单,就会发生这种情况。
发生的事情之一是创建一个'全局'包文件夹(.sln级别的文件夹),这意味着可以节省空间,因为这意味着您可以使用相同的包具有多个解决方案而不会重复大量的重复包文件夹在每个解决方案。
我在合并时发现了这个文本是两个csproj文件,需要谷歌:将项目差异导入包参考
请参阅https://docs.microsoft.com/en-us/nuget/reference/migrate-packages-config-to-package-reference
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.