msbuild / clickonce发布构建期间生成的文件

时间:2010-03-24 14:11:40

标签: .net msbuild clickonce

作为构建过程的一部分,我会生成一些在创建clickonce部署时应包含的文件。

Here是有人告诉您如何包含不属于该项目的项目的博客文章。但是,正如有人在博客文章的评论中提到的那样,当你在“BeforePublish”任务中执行它时,它不会更新部署显式,并且文件将无法下载 - 如果你在“BeforeBuild”中执行它,它可以正常工作虽然任务。

这给我一个鸡和蛋的问题,因为我必须首先执行构建以生成我想要包含的文件..

有人有解决方案吗?

(目前使用mage.exe生成clickonce部署的时间不是一个选项,必须使用Publish目标完成)

4 个答案:

答案 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