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



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

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

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

更新

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

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

我有一些以前没有使用NuGet软件包的遗留软件。在本地,我可以毫无问题地构建这些项目。但是,一旦触发CI生成,生成就会失败,因为代理上没有安装某些引用。

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

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

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

通过";框架组件";我指的是System.Windows.Forms之类的东西。船上的东西。NET。确切的设置取决于您所针对的目标框架。我猜这是的某个版本。NET框架。如果是这样的话,现在可以保留任何与System.*匹配的<Reference>项。

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

最新更新