我有一个如下所示的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)。
答案 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/
将它们放在路径环境变量
中