.NET Core (2.0) 中的引用
References in .NET Core (2.0)
我尝试添加对我的 .NET Core 的新引用 project.The 奇怪的是我还可以访问我的引用中涉及的项目。对于这个例子,我应该能够从服务中看到存储库项目,但不应该能够访问实体 Project.However ,我仍然可以从服务中访问实体对象。
怎么会?
基于 SDK 的项目中的引用是完全可传递的 - 类似于许多其他包管理器,如 npm 或 maven - 所有可传递的引用在项目中都可用,以确保应用程序编译和 运行s干净地,例如当依赖项被引用并且所有程序集都是构建输出的一部分并准备好 运行 时,没有未解析的引用。 (甚至可能将冲突解决应用于冲突版本的程序集,从而导致生成绑定重定向。)
在以前的版本中,您需要安装 NuGet 包或添加对其他项目的其他项目引用,才能避免生成错误或类型加载异常。
如果您希望您的项目完成能够运行并正确解决冲突但不将传递引用传递给编译器所需的所有事情,目前还没有完美的解决方法。
如果你只需要一个依赖来构建一个项目,而不是 运行 它,你可以将一个包或项目引用标记为 PrivateAssets="All"
(将 as 属性添加到 . csproj 文件)。
如果您想强制执行 API 用法 - 例如对于分层的 APIs,请考虑编写一个 roslyn 分析器,如果您从不想要的地方引用 APIs,它会发出警告。这可能适用于需要工具来维护所需架构的大型项目。
我尝试添加对我的 .NET Core 的新引用 project.The 奇怪的是我还可以访问我的引用中涉及的项目。对于这个例子,我应该能够从服务中看到存储库项目,但不应该能够访问实体 Project.However ,我仍然可以从服务中访问实体对象。
怎么会?
基于 SDK 的项目中的引用是完全可传递的 - 类似于许多其他包管理器,如 npm 或 maven - 所有可传递的引用在项目中都可用,以确保应用程序编译和 运行s干净地,例如当依赖项被引用并且所有程序集都是构建输出的一部分并准备好 运行 时,没有未解析的引用。 (甚至可能将冲突解决应用于冲突版本的程序集,从而导致生成绑定重定向。)
在以前的版本中,您需要安装 NuGet 包或添加对其他项目的其他项目引用,才能避免生成错误或类型加载异常。
如果您希望您的项目完成能够运行并正确解决冲突但不将传递引用传递给编译器所需的所有事情,目前还没有完美的解决方法。
如果你只需要一个依赖来构建一个项目,而不是 运行 它,你可以将一个包或项目引用标记为 PrivateAssets="All"
(将 as 属性添加到 . csproj 文件)。
如果您想强制执行 API 用法 - 例如对于分层的 APIs,请考虑编写一个 roslyn 分析器,如果您从不想要的地方引用 APIs,它会发出警告。这可能适用于需要工具来维护所需架构的大型项目。