NuGet 在共享项目 between 多个解决方案时的应用

3

我有几个解决方案共享某些公共项目,例如其中一个包含所有必要的内容来访问我的数据模型。

Solution Explorer situation

实际问题是在具有依赖关系的项目(例如Iesi.Collections)中使用NuGet安装包时,会在当前解决方案目录而不是项目目录中创建对dll的引用。然后,当我尝试转到我的其他解决方案时,共享项目无法编译(因为缺少程序集)。

First path reference Second path reference

我已经搜索了所有关于在独立方式下在解决方案之间的共享项目中使用NuGet的方法。
所以问题是...我如何管理NuGet在解决方案之间实现独立的行为和引用?

你真的用一堆前导空格来命名你的项目吗? - Wim Ombelets
3
@WimOmbelets说的是隐私问题……在任何项目名称中都不应出现空格。 - piraces
2个回答

5

解决这个问题的另一种方法是修改.csproj文件中的包引用路径,使用$(SolutionDir)宏来指向两个解决方案中正确的目录:

<ItemGroup>
    <Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
        <HintPath>
            $(SolutionDir)packages\Newtonsoft.Json.10.0.3\lib\net40\Newtonsoft.Json.dll
        </HintPath>
    </Reference>
    ...
</ItemGroup>

这应该是被接受的答案,运行得非常好。 - SumGuy

1
解决此问题的一种方法是在所有解决方案中添加一个.nuget\NuGet.config文件,并将repositoryPath设置为专用本地文件夹。
this link开始,假设您正在使用VS2015:
  1. 在解决方案的根目录(在文件系统上)中创建一个.nuget文件夹(如果您无法使用Windows资源管理器创建.nuget文件夹,则可以输入.nuget.)

  2. 在该文件夹中创建一个名为NuGet.config的文件。

  3. 在Visual Studio 2015中,右键单击解决方案并添加名为“.nuget”的新解决方案目录

  4. 右键单击该文件夹并选择添加现有文件,然后选择在(2)中创建的NuGet.config文件。

  5. 在NuGet.config文件中添加类似以下内容的内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <solution>
    <add key="disableSourceControlIntegration" value="true" />
  </solution>
  <config>
    <add key="repositoryPath" value="..\..\..\..\NugetPackages" />
  </config>
</configuration>
  1. 重新启动Visual Studio

请注意,您需要修复现有的引用,例如通过删除然后再次添加所有包来修复。

我个人使用绝对路径来存储包,因为我的解决方案不都在同一个文件夹层次结构中 - 如果您在团队中,您可能需要先讨论此问题。


听起来是个好主意,虽然我不知道为什么供应商没有直接提供。似乎它不能在VS 2017上工作,那我该怎么办呢? - SuperSaiyanGod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接