Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 项目参考VS NuGet_Visual Studio_Msbuild_Nuget_Solution - Fatal编程技术网

Visual studio 项目参考VS NuGet

Visual studio 项目参考VS NuGet,visual-studio,msbuild,nuget,solution,Visual Studio,Msbuild,Nuget,Solution,我应该如何引用同一解决方案中项目B中的另一个项目A? 如果我: 将对项目A的引用添加为项目引用 在project B中安装project A的NuGet软件包 困扰我的是构建依赖关系、版本控制……? 或者这会完全破坏解决方案的用途吗?使用第一种方法,您可以获得简单性,因为您不需要生成新版本的ProjectA nuget包,也不需要对其进行任何更改(即ProjectA.nupkg) 但是,使用第二种方法,您可以获得可移植性,因为您可以轻松地与其他项目/解决方案共享相同的nuget包 就个人而言

我应该如何引用同一解决方案中
项目B
中的另一个
项目A

如果我:

  • 将对
    项目A的引用添加为项目引用
  • project B
    中安装
    project A
    的NuGet软件包
困扰我的是构建依赖关系、版本控制……?

或者这会完全破坏解决方案的用途吗?

使用第一种方法,您可以获得简单性,因为您不需要生成新版本的ProjectA nuget包,也不需要对其进行任何更改(即ProjectA.nupkg)

但是,使用第二种方法,您可以获得可移植性,因为您可以轻松地与其他项目/解决方案共享相同的nuget包

就个人而言,我只为目标是与其他解决方案共享的项目创建nuget包。(例如LIB和框架)

希望这能帮助你做出决定

项目参考VS NuGet

项目引用或NuGet是我们开发过程中非常常见的问题,我们需要根据实际情况选择使用哪一个

例如,如果在开发过程中频繁修改引用的项目A,我们建议使用项目引用。因为如果使用nuget,则必须重建引用的项目,重新创建nuget包,将该nuget包重新安装到项目B,甚至必须将其发布到服务器。这将带来大量不必要的工作,并且在修改引用的项目a之后,我们经常忘记更新我们的nuget包。如果您使用项目引用,您将不会遇到这些问题。在我们构建项目B之前,修改后的引用项目A将自动更新

另一方面,当我们在解决方案之外共享引用的项目,或者将该项目共享给其他人时,nuget将是一个更好的选择。它具有更大的可移植性

因此,当您在同一解决方案中引用项目B中的另一个项目A时,建议使用项目引用。在解决方案外共享参考项目或将项目共享给其他人时,nuget更合适

此外,还有一个VisualStudio扩展,它自动将NuGet程序集引用切换到项目引用,反之亦然


希望这能有所帮助。

如今,使用新的csproj格式,您可以同时使用这两种格式(如果您在同一个解决方案中有两个项目)

在您的示例中,您可以将
项目B
中的
项目A
作为项目参考。然后,如果您想将
项目作为NuGet包发布,只需将以下标记添加到
属性组中的csproj中即可:

    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
true
绘图扭曲:如果您也想将
projectB
发布为NuGet包,只需添加
GeneratePackageOnBuild
target-MSBuild将
projectA.nupkg
设置为
projectB.nupkg
中的依赖项


通过这种方式,您可以在内部处理项目,同时将其作为包发布给第三方或其他团队。

项目参考是一种自然的选择。您遇到的问题到底是什么?项目与包引用和解决方案/回购分离通常更符合版本和发布周期的管理方式,以及开发团队在技术需求上的结构。发布NuGet包时,您可以使用.nuspec文件对旧项目执行此操作,如果引用的项目具有.nuspec文件,它将自动将其添加为
NuGet
引用。如果更改项目a但忘记发布其新版本,然后使用依赖于新更改的代码发布项目B,会发生什么情况?如果两个项目位于同一解决方案中,您可以同时执行更改并将其一起发布。如果您只是将projectB推送到提要,那么它将引用当前不存在的projectA包版本,因此您需要确保将它们一起发布。NuGet软件包需要一个良好的CI\CD进程。您正在描述一些不同的内容。生成包与引用包不同。为了与问题相关,
项目A
必须能够引用
项目B
,同时引用
B.nupkg
。在这种情况下,VS有点古怪——如果第二个添加NuGet引用,它会在解决方案资源管理器中使用黄色警告符号保留引用。如果第二个添加了project ref,它将卸载冲突的NuGet包(静默地,这不是理想的UX)。你是对的,它添加的内容比问题所要求的要多。我的解决方案添加的是两个选项的合并:您可以在解决方案中引用A作为项目,但如果您要发布B,则A将自动作为包引用。当使用旧的csproj格式时,情况并非如此,在旧的csproj格式中,B包将只在其lib文件夹中包含所有引用的二进制文件。