Nuspec:我可以将程序集作为依赖项但指示 visual studio 不引用它吗?

Nuspec: can I have an assembly as a dependency but instruct visual studio to NOT reference it?

我正在开发一组程序集,其中包含 classes,使用依赖注入框架,应该仅由 "InstanceProvider" class 实例化——基本上这是我通往 SimpleInjector 的 GetInstance() 的门户。然后我将这些程序集打包为 nuget 包。

我的目标是强制开发人员

var myDuck = InstanceProvider.GetInstance<IDuck>();

并没有做

var myDuck = new Duck();

为此,我必须避免引用某些程序集,即包含具体实现的程序集。不过我仍然需要他们在那里。

所以现在,我将它们作为我的 nuget 包中的依赖项。我正在寻找一种方法将它们保留在那里,但是当开发人员在她的项目中使用该程序包时,某些程序集应该 而不是 在他们的 visual studio 项目中直接引用。

这可能吗?

一般的回答你可以,但你不应该为此烦恼,直到你真的需要开发 "plugins" 支持的系统。这使调试变得更加复杂。

但是继续分接口和实现- 与动态加载无关,但是可以帮助你分层分代码。

有很多 DI 工具可以做到这一点,例如统一。他们使用的技术:您在 xml 文件中配置不需要引用的容器。然后容器搜索并加载它们。

Nuspec: can I have an assembly as a dependency but instruct visual studio to NOT reference it?

由于您不希望在为她的项目使用该包时直接在他们的 visual studio 项目中引用那些程序集,因此只将它们保留在那里。您可以在内容文件或工具文件中设置这些程序集,例如:

<file src="\*.dll" target="content\" />

<file src="\*.dll" target="Tools\" />

查看 Creating the .nuspec file 了解更多详情。

通过这种方式,那些程序集包含在nuget包中,但是当你使用nuget包时,这些程序集不会直接引用到项目中。

希望对您有所帮助。