我们的持续交付设置直到最近才使用以下命令提供Service Fabric软件包:
msbuild SFApp.sfproj /t:Package
这是必要的,因为目标 Package 在解决方案级别不可用。即命令
msbuild SFSolution.sln /t:Package
失败,因为目标不存在。
随着我们的依赖关系网格的增长,它达到了大多数接口项目在没有解决方案文件(to work around the "OutputPath does not exist" red herring)的情况下无法构建的程度。似乎有办法做到这一点according to this answer。不幸的是,像 Clean 这样的目标工作......
msbuild SFSolution.sln /t:SFApplication:Clean
(…snip…)
Build succeeded.
0 Warning(s)
0 Error(s)
......目标套餐赢了!
msbuild SFSolution.sln /t:SFApplication:Package
(…snip…)
Build FAILED.
"SFSolution.sln" (SFApplication:Package target) (1) -> SFSolution.sln.metaproj :
error MSB4057: The target "SFApplication:Package" does not exist in the
project. [SFSolution.sln]
0 Warning(s)
1 Error(s)
(为清楚起见,解决方案/项目文件夹/名称被省略/转述。如有必要,我可以提供实际日志。)
所以问题是:我怎么能使用命令行使用包目标和解决方案文件构建一个项目?
或如何从命令行打包Service Fabric应用程序?
答案 0 :(得分:4)
在没有sln的情况下编译sfproj文件(和任何其他项目文件)是个坏主意,因为它可能会从引用项目的输出中带来错误的内容。只有解决方案才能了解要在什么配置中编译的项目。
使包类似于"右键单击>包"在VS中: 只需在您的sfproj中添加以下目标
即可 <Target Name="ForcePackageTarget" AfterTargets="Build" Condition="'$(ForcePackageTarget)' =='true'">
<CallTarget Targets="Package"/>
</Target>
然后在解决方案上运行正常构建,您可以通过/ p触发程序包步骤:ForcePackageTarget = true:
msbuild yoursolution.sln /t:Build /p:ForcePackageTarget=true /p:Configuration=Release /p:Platform=x64
实际上它针对所有引用项目的解决方案配置执行二合一步骤,构建和打包
答案 1 :(得分:1)
MSBuild仅支持可在解决方案级别指定的一小组目标名称。正如您所发现的,Package不是其中之一。您需要对MSBuild执行两个单独的调用:一个构建解决方案,另一个调用sfproj上的Package目标。 sfproj的Package目标依赖于Build目标,因此它将确保构建sfproj及其项目依赖项。
答案 2 :(得分:1)
我遇到了同样的问题并通过更改失败项目中的平台来明确构建x64
来修复它。
点击Build
&gt; Configuration Manager
并确保为x64平台编译程序集,该程序集还应在相应的.csproj文件中设置输出路径。
正在执行的实际命令行操作是:
"C:\Program Files (x86)\MSBuild\14.0\bin\amd64\msbuild.exe" "C:\agent\_work\1\s\Project\SFProject.sfproj" /t:Package /p:platform="x64" /p:configuration="release" /p:VisualStudioVersion="14.0"
答案 3 :(得分:0)
使用以下脚本。
C:\ Program Files(x86)\ Microsoft Visual Studio 14.0&gt; msbuild“Fabric.sfproj”/ t:Package / p:Configuration = Release
服务结构要求在x64平台中设置Target, 因此,将所有引用项目目标更改为x64平台。
您可以使用解决方案的配置属性来执行此操作。如果“配置属性”中未列出x64,请在同一窗口中单击配置管理器,并在所需项目的平台列下将新项目平台添加为x64。
希望这适合你。
答案 4 :(得分:-1)
我们遇到了与您完全相同的问题,我一直在寻找解决方案,并在整个网络上进行了一些实验。这些是对我们有用的步骤:
msbuild.exe SFAplication.xproj /p:Configuration=Release /target:rebuild
msbuild.exe SFAplication.sfproj /p:Configuration=Release /target:Package