NuGet在解决方案之间共享项目时

时间:2017-02-23 09:55:07

标签: c# .net visual-studio nuget

我有几个共享某些常见项目的解决方案,例如包含访问我的数据模型所需的所有项目的项目。

Solution Explorer situation

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

First path reference Second path reference

我已经四处搜索,以独立的方式在解决方案之间的共享项目中使用NuGet。

所以问题是......如何在NuGet中管理获取独立行为和解决方案?

2 个答案:

答案 0 :(得分:1)

解决此问题的一种方法是向所有解决方案添加.nuget\NuGet.config文件,并将repositoryPath设置为已删除的本地文件夹。

来自this link,假设您正在使用VS2015:

  1. 在解决方案的根目录中(在文件系统上)创建一个.nuget文件夹(如果您在使用Windows资源管理器创建.nuget文件夹时遇到问题,可以输入{{} 1}}代替)

  2. 在该文件夹中,创建一个文件NuGet.config。

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

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

  5. 在NuGet.config文件中添加这样的内容:

  6. .nuget.
    1. 重新启动Visual Studio
    2. 请注意,您必须修复现有引用,例如删除然后再添加所有包。

      我个人使用包的绝对路径,因为并非我的所有解决方案都在同一个文件夹层次结构中 - 如果你在团队中,你可能想先讨论它。

答案 1 :(得分:0)

解决此问题的另一种方法是修改.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>