【发布时间】:2014-01-08 00:18:18
【问题描述】:
我正在尝试使我们的 TFS 构建过程从我们的解决方案项目中生成 NuGet 包。我们的目标是创建一个私有包源,因此所有其他内部产品都可以使用 NuGet 下载/更新框架。
到目前为止,我们已经让构建过程运行(很长时间)并对我们的库进行版本控制,剩下的就是“nuget pack”所有项目。
到目前为止我所做的尝试:
- nuget spec *.csproj,然后是 nuget pack *.nuspec;
- nuget spec *.dll,然后是 nuget pack *.nuspec;
- nuget 直接打包 *.csproj(无 .nuspec 文件);
它们似乎都有效,但它们似乎都在我真正需要它们成功的步骤上失败了。
我从上述步骤中实际得到的:
没有列出依赖项¹,没有列出参考²;
没有列出依赖项¹,列出没有引用²,目录中的所有 dll 都打包在同一个 .nupkg 上(不使用 -IncludeReferencedProjects);
(迄今为止最好的)一些依赖项¹列出,没有参考²列出,只有实际项目 dll 位于 .nupkg 的 lib 文件夹中。
¹:我所说的依赖是指 NuGet 依赖,来自 NuGet 的包
²:引用是指解决方案项目引用。
示例场景:
解决方案1.sln
-- 项目A
-- 项目B
ProjectA 有一个对 ProjectB 的项目参考。我期望在生成的 .nuspec 上发生的事情:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<metadata>
<id>ProjectA <- OK</id>
<version>1.2.0.0 < - OK</version>
<title>ProjectA <- OK</title>
<authors>My Company <- OK</authors>
<owners>My Company <- OK</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Description</description>
<copyright>OK</copyright>
<dependencies>
<dependecy id="ProjectB" Version="1.2.0.0" /> <<<<<<---- NOT HAPPENING!
</dependencies>
</metadata>
</package>
列出了一些 nuget 依赖项,但不是全部(即使它们位于引用项目的 packages.config 中)。例如:我有一个项目依赖于其他 4 个 NuGet 包,只有 2 个被列为生成的 .nuspec 文件的依赖项。
重要信息:
- 每个项目都有自己的 packages.config,NuGet 构建它的方式;
- 解决方案文件夹包含 packages 文件夹,以及所有引用的包;
- 已经尝试过 Nugetter(XAML 在 VS 2012.3 和 TFS 2012 上损坏,无法打开)
- 已经试过this,也没有正确包含依赖和引用;
- 解决方案包还原已打开开启(我们需要这样做以避免将包存储在 TFS 上)。
我需要什么:
- 自动化打包过程以打包每个 csproj,包括 .nuspec 文件上的所有引用和依赖项,以便在安装时正确加载所有这些。
我研究过的类似问题:
NuGet: pack command is NOT including nuget dependencies
Nuget pack only including dependencies for some projects
Why doesn't nuget include the referenced project when packing?
【问题讨论】:
标签: c# visual-studio tfs msbuild nuget