Eke*_*voo 8 msbuild continuous-integration continuous-delivery azure-service-fabric
直到最近,我们的持续交付设置是使用以下命令提供Service Fabric软件包:
msbuild SFApp.sfproj /t:Package
Run Code Online (Sandbox Code Playgroud)
这是必要的,因为目标包在解决方案级别不可用.即命令
msbuild SFSolution.sln /t:Package
Run Code Online (Sandbox Code Playgroud)
失败,因为目标不存在.
随着我们的依赖关系网格的增长,如果没有解决方案文件,大多数接口项目将无法构建(解决"OutputPath不存在"的问题).根据这个答案,似乎有办法做到这一点.不幸的是,虽然目标像清洁工作......
msbuild SFSolution.sln /t:SFApplication:Clean
(…snip…)
Build succeeded.
0 Warning(s)
0 Error(s)
Run Code Online (Sandbox Code Playgroud)
......目标套餐不会!
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)
Run Code Online (Sandbox Code Playgroud)
(为清楚起见,解决方案/项目文件夹/名称省略/更改.如有必要,我可以提供实际日志.)
所以问题是:我怎样才能使用命令行,使用Package目标和解决方案文件构建一个项目?
或者我如何从命令行打包Service Fabric应用程序?
不使用sln编译sfproj文件(和任何其他项目文件)是个坏主意,因为它可能给引用项目带来错误的内容。只有解决方案才知道要在哪种配置中编译哪个项目。
在VS中使Package类似于“ Right Click-> Package”:只需将以下目标添加到sfproj中
<Target Name="ForcePackageTarget" AfterTargets="Build" Condition="'$(ForcePackageTarget)' =='true'">
<CallTarget Targets="Package"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
然后运行正常的构建解决方案,您可以通过/ p:ForcePackageTarget = true触发软件包步骤:
msbuild yoursolution.sln /t:Build /p:ForcePackageTarget=true /p:Configuration=Release /p:Platform=x64
Run Code Online (Sandbox Code Playgroud)
实际上,它针对所有引用的项目执行“解决方案配置”的二合一步骤:构建和打包
MSBuild 仅支持可在解决方案级别指定的一小组目标名称。正如您所发现的,Package 不是其中之一。您需要对 MSBuild 执行两次单独的调用:一次构建解决方案,另一次调用 sfproj 上的 Package 目标。sfproj 的 Package 目标依赖于 Build 目标,因此它将确保构建 sfproj 及其项目依赖项。
归档时间: |
|
查看次数: |
3285 次 |
最近记录: |