【发布时间】:2015-09-01 06:38:14
【问题描述】:
我们有一个框架,该框架在一个解决方案中分为许多单独的项目。我现在想为每个单独的项目创建 NuGet 包,但是保证只能在一个解决方案中使用框架的一个版本(可能跨多个项目)。
例如,假设框架由两个项目组成:
Framework
Framework_1
Framework_2
现在,当使用这个框架时,一个项目可能引用Framework_1,而另一个项目引用Framework_2。我想确保两个软件包具有相同的版本(如果有一个简单的单步过程可以升级到新版本,则可以加分)
我想我只定义一个解决方案级别的框架包,所有其他包都严格依赖它。问题是 NuGet 只需安装几个版本的解决方案级别包就没有问题。
基本上我尝试了以下方法:
解决方案级nuspec文件:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>My.Framework</id>
<version>1.0.0</version>
<title>My.Framework</title>
<authors>voo</authors>
<owners>voo</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Some Framework Solution Package</description>
<copyright>Copyright © 2015</copyright>
</metadata>
</package>
还有一个 nuspec 包用于某一部分:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>My.Framework.BL</id>
<version>1.0.0</version>
<title>My.Framework.BL</title>
<authors>voo</authors>
<owners>voo</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Business Layer</description>
<copyright>Copyright © 2015</copyright>
<dependencies>
<dependency id="My.Framework" version="[1.0.0]"/>
</dependencies>
</metadata>
</package>
现在的问题是,如果我尝试安装另一个 My.Framework.EF 软件包,其版本为 1.0.1 并且显式依赖于 My.Framework 1.0.1 Visual Studio 只会安装 My.Framework 两次 - 一次是版本 1.0 .0 和 1.0.1 一次。
【问题讨论】:
-
为什么不明确说明您要安装的版本?还是我错过了什么?
-
我是否正确地说你想要的是某种包包,所有子包都使用相同的版本?我必须承认我发现你的问题有点模糊。
-
@Pseudonym 因为这允许某人意外更新框架的一部分,但不能更新其他部分。这个想法是有一个位置来指定版本,或者至少有某种保证可以捕获此类错误。
-
您使用的是构建服务器吗?如果有,是哪一个?
-
@Iain Team Foundation Build Server,但我确实希望它在本地编译时与普通 Visual Studio 2013 一样工作。
标签: c# visual-studio-2013 nuget nuget-package nuget-spec