强制编译器仅使用来自已安装 NuGet 包的引用,而不是本地 DDL

Force compiler to use references from installed NuGet packages only instead of local DDLs

是否可以告诉编译器不加载本地安装的 DLL 并仅使用已安装的 NuGet 包提供的引用?

在我们的开发机器上,安装了各种框架,但我们的 CI 环境中缺少这些框架。这通常会导致构建失败并且修复起来非常烦人。

例如,我的一个项目引用 Microsoft.Office.Interop.Word 可以在本地工作,因为办公套件安装在我的机器上。一旦我 运行 在 CI 中构建,构建就会失败,因为我们的代理上没有安装办公套件。

更新

我的问题的根源如下。我有一些以前没有使用 NuGet-Packages 的遗留软件。在本地,我可以毫无问题地构建这些项目。但是一旦我触发 CI 构建,构建就会失败,因为代理上没有安装某些引用。然后我必须搜索可以替换本地引用的 NuGet 包并将更改推送到我们的 git 存储库。

我想跳过这个耗时的更改引用的任务,然后推送并等待构建完成。如果有一个选项告诉编译器不要使用本地引用,我会在我的本地机器上遇到同样的错误。

I have some legacy software which did not use NuGet-Packages before. Locally, I can build those projects without any problems. But as soon as I trigger a CI build, the build fails as some references are not installed on the agent.

您的项目将从 GAC 或通过 COM 引用程序集。

您想禁止引用其中任何一个(作为目标框架的一部分提供的核心程序集除外)。

为此,请在所有项目文件(即 .csproj 文件)中搜索类型为 <Reference><COMReference> 的任何项目。任何引用非框架程序集的这些都应该被删除并转换为 <PackageReference>

我所说的“框架程序集”是指 System.Windows.Forms 之类的东西。 .NET 附带的东西。确切的集合取决于您的目标框架。我猜这是某个版本的 .NET Framework。如果是这样,也许暂时保留任何 <Reference> 匹配 System.* 的项目。

如果 <Reference> 有一个 HintPath,这是一个很好的迹象,表明它也在本地从您的机器上获取并且应该转换。