2013-12-19 75 views
4

我试图让我们的TFS构建过程从我们的解决方案项目中生成NuGet包。我们的目标是创建一个私有包源,因此所有其他内部产品都可以使用NuGet下载/更新框架。用于TFS持续集成的NuGet包

到目前为止,我们已经完成了构建过程(很长一段时间)并对我们的库进行了版本控制,剩下的仅仅是“nuget pack”所有项目。


我至今tryed:

  1. 的NuGet规范* .csproj的,然后收拾的NuGet * .nuspec;
  2. nuget spec * .dll,然后nuget pack * .nuspec;
  3. nuget pack * .csproj直接(no .nuspec文件);

所有这些似乎工作,但他们都似乎失败的步骤,我实际上需要他们取得成功。

我实际上是从做提到的步骤获得:

  1. 没有dependency¹上市,没有reference²上市;

  2. 没有dependency¹上市,上市没有reference²,从目录中的所有DLL被打包在同一.nupkg(whitout使用-IncludeReferencedProjects);

  3. (最好到目前为止)一些dependencies¹上市,没有reference²上市,只有实际的项目DLL是在.nupkg lib文件夹内。

¹:通过依赖我的意思的NuGet依赖关系,从的NuGet
²:通过参考我的意思是解决方案项目引用。


示例场景:

Solution1.sln
- 项目A
- 项目B

项目A具有项目参考到项目B。我希望上产生的.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依赖列,但不是所有的人(即使他们是从refeered项目packages.config内)的。例如:我有一个依赖其他4个NuGet包的项目,只有2个被列为生成的.nuspec文件的依赖项。


重要信息:

  • 每个项目都有自己的packages.config,建立的NuGet的方式;
  • 解决方案文件夹包含packages文件夹和所有引用的包;
  • 已经试用过Nugetter(XAML破解VS 2012.3和TFS 2012,无法打开它)
  • 已经尝试过this,也不包括正确的依赖和引用;
  • 解决方案包恢复已打开ON(我们需要这样做以避免将包存储在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?

回答

3

原来是一个简单的路径问题。引用和依赖关系没有被正确添加,因为我正在执行来自其他工作目录的命令。

最重要的是,使用-IncludeReferencedProjects是正确添加所需的所有内容所必需的。

之后,使用Powershell的构建过程成功完成,一切按预期工作=)