【问题标题】:Reference project in two ways两种方式参考项目
【发布时间】:2020-12-16 11:17:27
【问题描述】:

我有一个名为框架的项目,我有依赖于这个框架项目的模块项目。

问题是:我团队中的一些开发人员将拥有此框架代码,而其他人则没有。我想知道是否有一种方法,如果 Visual Studio 没有找到这个引用,它会自动从 nuget 包中获取这个框架库。

【问题讨论】:

  • 如果它被引用为 nuget 包但缺少 dll,Visual Studio 将在构建项目时自动获取 dll。 Visual Studio 中有一个针对此行为的设置工具 -> 选项 -> NuGet 包管理器 -> 常规 | “包还原” | “允许 NuGet 下载丢失的包” - 这是你要找的吗?
  • @RandRandom 所以,我的 csproj 带有一个引用我的框架库的 标记。如果找不到此参考,Visual Studio 如何知道它应该在哪里获得什么版本?预期的行为:它应该在指定版本的某处获得正确的 nuget 包,

标签: c# .net visual-studio asp.net-core nuget


【解决方案1】:

您有两种选择来引用其他项目:

项目参考

这通常使用 monorepo 方法完成,大多数时候所有项目都是同一解决方案的一部分。

如果您想从其他存储库中引用项目,Git 子模块可能是一个选项https://git-scm.com/book/en/v2/Git-Tools-Submodules

项目引用在您的 my-project.csproj 文件中如下所示:

<ProjectReference Include="..\..\Modules\Core\Core.csproj" />

NuGet 包

您可以在此处构建框架并将其发布为 NuGet 包。然后在需要时引用包(而不是项目),Visual Studio 将从您的 NuGet 存储库下载指定版本。

设置您自己的 NuGet 存储库的两个选项:

你也可以使用本地文件系统How do I install a NuGet package .nupkg file locally?中的NuGet包(我个人不建议在大多数情况下这样做)

在 my-project.csproj 文件中引用 NuGet 包:

<PackageReference Include="Serilog.AspNetCore" Version="3.4.0" />

或使用 Visual Studios 包管理器:https://docs.microsoft.com/en-us/nuget/quickstart/install-and-use-a-package-in-visual-studio

请注意,您必须先添加 NuGet 存储库提要:https://docs.microsoft.com/en-us/azure/devops/artifacts/nuget/consume?view=azure-devops

另见

【讨论】:

  • 感谢您的回答。我可以同时使用它们吗?如果找不到项目引用,请使用 Nuget 包?
  • 您不能以两种不同的方式引用相同的类 - s。 “另见”下方的链接。为什么某些开发人员应该使用项目引用和其他 NuGet?
  • 将项目引用和包作为后备的一个原因是,开发人员可以在本地调试代码,但是当构建管道运行时,它会拉取 nuget 包
  • 您也可以调试 nuget 包:将 DebugSymbols 添加到 lib 项目并禁用“只是我的代码”。
【解决方案2】:

您可以使用Conditions 仅当项目确实存在时才包含它:

<ProjectReference Include="..\..\Framework\Framework.csproj" Condition="Exists('..\..\Framework\Framework.csproj')" />

<PackageReference Include="MyCompany.Framework" Version="1.0.0" Condition="!Exists('..\..\Framework\Framework.csproj')" />

【讨论】:

    猜你喜欢
    • 2011-10-23
    • 2016-03-16
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多