在一个解决方案中声明相互依赖的nuget包

比特邦克

我们为许多项目提供了解决方案,并且这些项目之间的依赖关系图或多或少地复杂。现在,这些项目中的每一个都应成为自己的nuget程序包,并且nuget程序包的依赖关系图应反映项目的状态。

我有两个问题:

  1. 是否可以在将所有项目都放在同一解决方案中的同时实现这一目标?如果可以,怎么办?
  2. 是否建议将所有项目保持在同一解决方案中?什么是常见的“最佳实践”方法?
脊椎骨

我们项目中的情况是相同的,我们采用以下方法:

第一步是创建用于定义软件包的nuspec文件。我们已经将所有这些文件放置在解决方案的根目录中的名为“ .nuspec”的文件夹中。nuspec文件也添加到解决方案文件夹中的解决方案文件夹中,该文件夹名为“ .nuspec”。

该解决方案本身具有一个全局AssemblyInfo文件,该文件包含版本信息以及一些版权资料-简而言之,就是我们项目之间通用的所有信息。然后,每个项目都有自己的装配信息,并添加特定于每个项目的信息。

nuspec文件不包含版本。相反,我们$(version)在那里使用占位符:

<?xml version="1.0" encoding="utf-16"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>MyCompany.MyProduct.Server.DataAccess</id>
    <version>$(Version)</version>
    <authors>MyCompany</authors>
    <projectUrl>http://example.com/myProduct.html</projectUrl>
    <iconUrl>http://example.com/myProduct.icon.png</iconUrl>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Some description goes here.</description>
    <summary>The summary goes here</summary>
    <copyright>Copyright © MyCompany 2015</copyright>
    <language>en-US</language>
    <dependencies>
      <dependency id="MyCompany.MyProduct.Common" version="$(Version)" />
      <dependency id="MyCompany.MyProduct.Server" version="$(Version)" />
    </dependencies>
  </metadata>
  <files>
    <file src="path\to\MyCompany.MyProduct.Server.DataAccess.dll" target="lib\net45\MyCompany.MyProduct.Server.DataAccess.dll" />
  </files>
</package>

(当然,依赖关系本身可能也具有依赖关系。例如,服务器组件可能引用日志记录组件。)

最初,我们创建了一个控制台应用程序,从全局AssemblyInfo文件中读取解决方案的版本,并将其解析为所有nuspec文件,然后再创建和发布程序包。

控制台应用程序运行良好,但是要在启用了持续集成的TFS环境中进行维护则有些繁琐。因此,我们定义了一个自定义的TFS构建模板来完成这项工作。现在,我们为所有项目创建一组nuget包所需要做的就是触发TFS构建。

这种方法的优点是所有软件包都具有相同的版本,因此可以很好地协同工作。这种方法的缺点是所有软件包都具有相同的版本,并且不能独立发布。

我们之所以选择这种方法,是因为它阻止了我们生产集成不良的组件。我们的项目提供了一个小型框架,用于开发所有非常相似的小型LOB应用程序。由于我们以一组不同的软件包交付框架,因此开发人员可以选择他们实际需要的软件包,然后仅安装它们。如果开发人员以后决定添加缺少的功能,那么他只需安装与已安装版本具有相同版本的相关软件包即可。因此,无需担心兼容性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当多个解决方案中包含某些项目时,为所有解决方案设置一个公共的nuget软件包文件夹

在同一解决方案中引用项目中的Nuget包所需的解决方案

有没有办法将nuget包引用从一个解决方案复制到.net-core中的另一个解决方案?

在一个解决方案中处理多个Nuget项目

一个解决方案中可以有多个NuGet配置吗?

在具有两个项目的一个解决方案文件中安装不同版本的nuget软件包

如何让 NuGet 包为从另一个解决方案添加的现有项目正确恢复?

一个如何与柯南打包相互依赖的库?

函数中相互依赖的函数声明

创建引用解决方案中另一个软件包的软件包

Python - 如何在同一个文件中定义相互依赖的类?

Azure Pipeline-从具有项目依赖性的解决方案中构建一个项目

如何制作本地nuget程序包并在dotnet核心中的本地解决方案中相互引用

获取解决方案中的所有nuget包

从解决方案中删除nuget软件包还原

另一个解决方案无法识别新创建的依赖项属性

在另一个类中调用相互依赖的两个类?-Java图形用户界面

如何使用模型中的解决方案来解决另一个问题

两个芹菜应用程序可以相互依赖吗?一个应用程序的两个任务是相互依赖的?

如何使一个递归解决方案返回所有可能的解决方案?

即使给出了一个解决方案,fsolve 也无法找到解决方案

在标准ML中声明相互依赖的值和函数

如何删除一个(一组)相互依赖的软件?

一个解决方案中具有自己视图的两个MVC项目

如何在一个解决方案中合并两个Web项目

解决代码中模块之间的相互依赖性

CentOS 6.5中相互依赖的冲突软件包

使用仍在开发中的另一个解决方案中的代码

Swift在一个if语句中相互依赖包装多个可选选项