两种方式参考项目

3
我有一个名为“框架”的项目,还有模块项目依赖于该框架项目。
问题是:我的团队中的一些开发人员将拥有这个框架代码,而其他人则没有。我想知道是否有一种方法,如果Visual Studio找不到这个引用,它会自动从NuGet包获取这个框架库。

如果一个NuGet包被引用但是dll文件丢失,Visual Studio会在构建项目时自动获取这些dll文件。在Visual Studio中有一个设置可以控制这种行为:工具 -> 选项 -> NuGet程序包管理器 -> 常规 | “程序包还原” | “允许NuGet下载缺少的程序包” - 这就是你要找的吗? - Rand Random
@RandRandom,我的csproj文件中有一个<ProjectReference>标签引用了我的框架库。如果找不到这个引用,Visual Studio如何知道在哪里以及应该获取哪个版本?期望的行为是:它应该从某个指定版本的NuGet包中正确获取。 - carlosza
2个回答

5

您可以使用Condition来仅在项目实际存在时包含它:

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

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

3

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

项目引用

这通常是使用单存储库方法完成的,大多数情况下,所有项目都是同一个解决方案的一部分。

如果您想从其他存储库中引用项目,则 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 存储库:

您也可以从本地文件系统使用 NuGet 包 如何在本地安装 NuGet 包 .nupkg 文件?(对于大多数情况,我个人不建议使用此方法)

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

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

或者使用Visual Studio包管理器:https://learn.microsoft.com/zh-cn/nuget/quickstart/install-and-use-a-package-in-visual-studio

请注意,您必须先添加您的NuGet存储库源:https://docs.microsoft.com/zh-cn/azure/devops/artifacts/nuget/consume?view=azure-devops&tabs=windows

另请参阅


1
谢谢你的回答。我可以同时使用它们吗?如果找不到项目引用,可以使用Nuget包吗? - carlosza
1
您不能以两种不同的方式引用相同的类 - 请参见下面的链接“另请参阅”。为什么有些开发人员应该使用项目引用,而其他人则使用NuGet? - Christoph Lütjen
将项目引用和软件包作为备选项的一个原因是开发人员可以在本地调试代码,但当构建管道运行时,它将拉取NuGet软件包。 - PlantationGator
你也可以调试NuGet包:将DebugSymbols添加到lib项目中并禁用“仅限我的代码”。 - Christoph Lütjen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接