Visual Studio 2017 使用旧的 Nuget 包而不是程序集引用

fri*_*gle 5 .net-assembly visual-studio nuget .net-core visual-studio-2017

我有一个正在开发的公共库。我们称之为 My.Common。

My.Common 的版本 1 已上传到我的 Intranet Nuget 服务器,并在其他几个库中使用,例如 My.Logging 和 My.Navigation。

在开发通过 Nuget 使用 My.Common、My.Logging 和 My.Navigation 的 .Net Core 应用程序时,我发现了 My.Common 中的一个错误。因此,我需要修复版本 2 的 My.Common。该错误影响应用程序直接使用的功能 - 它对其他库没有影响,它们可以继续使用版本 1。

我打开 My.Common 的代码,尝试修复并编译。在应用程序中,我删除了 My.Common 的 Nuget 包,并在其 bin 文件夹中添加了对 My.Common DLL 的引用。

这时我发现我在应用程序中没有看到 My.Common 的更改。在 My.Common 的“属性”窗口中,路径显示为:

C:\Users\foo\.nuget\packages\my.common\1.0.0\lib\netcoreapp2.0\My.Common.dll
Run Code Online (Sandbox Code Playgroud)

以下是 .csproj 中的引用的外观:

  <ItemGroup>
    <Reference Include="My.Common">
      <HintPath>C:\Projects\My.Common\bin\Debug\netcoreapp2.0\My.Common.dll</HintPath>
    </Reference>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

尽管我已将其添加为程序集引用,但它正在被覆盖并从其 Nuget 包中提供!

由于程序集和 Nuget 包有不同的版本,我想我可以通过更明确地了解版本来解决这个问题。

  <ItemGroup>
    <Reference Include="My.Common, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
      <HintPath>C:\Projects\My.Common\bin\Debug\netcoreapp2.0\My.Common.dll</HintPath>
      <SpecificVersion>true</SpecificVersion>
    </Reference>
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

当设置为 true 时,Visual Studio 似乎根本无法找到程序集 - 属性中的路径为空,并且应用程序填充“(您是否缺少程序集引用?)”错误。

我需要获取 My.Logging 和 My.Navigation 的本地副本,用程序集引用替换它们的 My.Common Nuget 包,编译,然后用程序集引用替换原始应用程序中的所有 Nuget 包,这似乎很极端。

我该怎么做才能让 Visual Studio 真正使用本地程序集引用?

Leo*_*SFT 0

Visual Studio 2017 使用旧的 Nuget 包而不是程序集引用

您可以使用项目引用而不是使用 NuGet。

正如您所评论的,如果引用的项目经常修改,我们必须重建它,重新创建 nuget,每次修改都将其重新发布到 Nuget 服务器,并且必须将该 nuget 包重新安装到引用的项目中。这会带来很多无聊的工作。为了解决这个缺点,项目到项目的参考应该是一个更好的方法。

您可以查看此线程以获取更多详细信息。