作为构建过程的一部分,我会生成一些在创建clickonce部署时应包含的文件。
Here是有人告诉您如何包含不属于该项目的项目的博客文章。但是,正如有人在博客文章的评论中提到的那样,当你在“BeforePublish”任务中执行它时,它不会更新部署显式,并且文件将无法下载 - 如果你在“BeforeBuild”中执行它,它可以正常工作虽然任务。
这给我一个鸡和蛋的问题,因为我必须首先执行构建以生成我想要包含的文件..
有人有解决方案吗?
(目前使用mage.exe生成clickonce部署的时间不是一个选项,必须使用Publish目标完成)
答案 0 :(得分:3)
您可以这样做:
<ItemGroup Condition="'$(Configuration)' == 'Release'">
<Content Include="..\bin\Release\Reports\Report.srf" Condition="Exists('..\bin\Release\Reports\Reports.srf')">
<Link>Reports\Reports.srf</Link>
<Visible>false</Visible>
</Content>
</ItemGroup>
这将要求您以两个步骤运行构建和发布。也就是说,从一个干净的
工作副本,msbuild /p:Configuration=Release /t:Publish
将不会在部署中包含此文件,您必须先运行msbuild /p:Configuration=Release
然后再msbuild /p:Configuration=Release /t:Publish
,否则清单将在发布期间更新。
答案 1 :(得分:2)
结帐this post。我很确定这是我在此处设置部署过程时使用的那个。
我们需要在bin目录中包含非.net dll以使我们的应用程序正常工作,它们已经构建好,因此我没有“首先需要构建”的问题。但是,我将'include'作为 BeforePublish 目标的一部分:
<Target Name="BeforePublish" DependsOnTargets="IncludeAdditionalPublishFiles;
ReleaseModeUpdateConfig;
ReleaseModeInsertDatabaseRecords " />
<ItemGroup>
<AdditionalPublishFile Include="..\..\..\..\..\SharedDependencies\Leadtools\Leadtools.Codecs.J2k.dll">
<Visible>False</Visible>
</AdditionalPublishFile>
</ItemGroup>
<Target Name="IncludeAdditionalPublishFiles" Condition=" '$(Configuration)' == 'Release' And Exists('@(IntermediateAssembly)') " >
<Touch Files="@(IntermediateAssembly)" />
<CreateItem Include="@(AdditionalPublishFile)" AdditionalMetadata="TargetPath=%(FileName)%(Extension);IsDataFile=false">
<Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" />
</CreateItem>
</Target>
正如您所看到的, IncludeAdditionalPublishFiles 执行“包含”工作(查看博客帖子中的“这里的内容是什么”),我还更新了配置并设置了一些值SQL Compact Db。
要做到正确需要一些试验和错误,但最终会有效。请注意,您可以根据需要添加任意数量的AdditionalPublishFile。
答案 2 :(得分:1)
因此,您希望包含由构建生成的文件。
我认为,虽然您说这不是一个选项,但唯一的解决方案是通过Mage或MageUI执行手动部署。只有这样,您才能在构建和部署之间进行控制。 你不能创建一个批处理文件来部署你的应用程序吗?您可以在Post-Build事件中执行批处理文件。
答案 3 :(得分:0)
试试这个:构建你的项目。然后进入“应用程序文件”对话框并单击“显示所有文件”。它是否显示您要包含的文件?如果是,请将它们标记为包含(必填)。它应该保留这些,并将它们包含在部署中。
RobinDotNet