bit*_*onk 13 nuget nuget-package nuget-spec
我们有很多项目的解决方案,以及这些项目之间或多或少复杂的依赖图.现在每个项目都应该成为自己的nuget包,nuget包的依赖图应该反映项目的内容.
我有两个问题:
我们项目的情况是一样的,我们采取了以下方法:
第一步是创建定义包的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>
Run Code Online (Sandbox Code Playgroud)
(当然,依赖项本身可能具有依赖项.例如,服务器组件可能引用日志记录组件.)
最初,我们创建了一个控制台应用程序,从全局AssemblyInfo文件中读取解决方案的版本,并在创建和发布包之前将其解析为所有nuspec文件.
控制台应用程序运行良好,但在启用持续集成的TFS环境中进行维护有点繁琐.所以我们定义了一个自定义TFS构建模板来完成这项工作.我们现在需要做的就是为所有项目创建一组nuget包,以触发TFS构建.
这种方法的优点是所有包都具有相同的版本,因此可以很好地协同工作.这种方法的缺点是所有包都具有相同的版本,不能独立发布.
我们之所以选择这种方法,是因为它阻止我们生产一个集成度很差的组件.我们的项目提供了一个小框架,用于开发所有非常相似的小型LOB应用程序.由于我们在一组不同的包中提供框架,开发人员可以选择他们实际需要的包,然后只安装那些包.如果开发人员决定稍后添加缺少的功能,他只需安装与已安装版本相同的相关软件包.因此,无需担心兼容性.
目前,在 VS 2017 中,您可以在一个解决方案中拥有多个库项目,这些项目内置于单独的包中,并且还可以通过<ProjectReference>. 令人惊讶的是,VS 足够智能,可以在构建解决方案时使用,并为 nuspec 中引用的项目<ProjectReference>生成正确的包。<dependencies>换句话说,您可以在一个解决方案中方便地同时处理多个项目,并将它们全部发布为一组相互依赖的包。
| 归档时间: |
|
| 查看次数: |
1914 次 |
| 最近记录: |