nuspec文件节点可以采用任何类型的变量吗?

时间:2012-01-09 17:49:51

标签: nuget

我有一个如下所示的nuspec文件节点:

<files>
   <file src="bin\Release\MyProject.dll" target="lib\MyProject.dll" />
</files>

我在后编译步骤中运行我的nuspec打包。它在Visual Studio中运行良好。

但是TFS没有构建“正常”它将所有库和源放在“Binaries”文件夹中。

有没有办法在执行TFS构建时将<file>节点中的变量指向Binaries文件夹,并在Visual Studio Build中构建时保持正常?

我宁愿不必拥有两个nuspec文件(一个用于TFS,另一个用于visual studio)。

2 个答案:

答案 0 :(得分:1)

我通过在项目中创建一个我想要制作Nuget包的包文件夹来解决它。

我在那里制作了所有文件夹和不变的文件。

我在项目中添加了一个post build步骤,它将刚刚构建的文件复制到package文件夹中并运行Nuget.exe

所以它是:

构建项目 将输出复制回项目的Package \ Lib 使用包文件夹中的nuspec文件运行Nuget.exe 将结果复制到输出的其余部分旁边的输出文件夹。

Nuget.exe必须位于系统上的固定文件夹和buildserver(脏解决方案)中,或者包含在您的构建中(不太脏)。

答案 1 :(得分:1)

这是使用命令行

执行此操作的简便方法

在预构建事件命令行中 如果nuget规范不存在,则创建它并等待5秒

cd "$(TargetDir)..\..\"
if exist $(TargetDir)..\..\*.nuspec (goto dontcreatespec) ELSE (goto createspec)
:createspec
nuget spec -f
ping -n 5 127.0.0.1 > nul
:dontcreatespec

在post-build事件命令行中 等待5秒钟,使用fart查找并替换模板字符串,然后复制到另一个目录

cd "$(TargetDir)..\..\"
ping -n 5 127.0.0.1 > nul
set find1="Summary of changes made in this release of the package."
set replace1="summary test"
set find2="http://ICON_URL_HERE_OR_DELETE_THIS_LINE"
set replace2="http://test.com"
set find3="Tag1 Tag2"
set replace3="testtag"
set find4="http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE"
set replace4="http://test.com"
set find5="http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE"
set replace5="http://test.com"
fart -i "$(TargetDir)..\..\*.nuspec" %find1% %replace1%
fart -i "$(TargetDir)..\..\*.nuspec" %find2% %replace2%
fart -i "$(TargetDir)..\..\*.nuspec" %find3% %replace3%
fart -i "$(TargetDir)..\..\*.nuspec" %find4% %replace4%
fart -i "$(TargetDir)..\..\*.nuspec" %find5% %replace5%
nuget pack $(ProjectPath)
xcopy *.nupkg "$(TargetDir)..\..\..\localpackages" /s /d /y

您需要Nuget.exe和fart.exe

https://nuget.codeplex.com/releases

http://fart-it.sourceforge.net/

将它们放在路径环境变量