MSBuild/ClickOnce发布文件是在构建过程中生成的。

4
作为我的构建过程的一部分,我生成了一些文件,这些文件在创建ClickOnce部署时应该被包含。 这里有一篇博客文章告诉你如何包含不属于项目的项。然而,正如那篇博客文章的评论中有人提到的那样,在“BeforePublish”任务中这样做不会更新部署清单,文件也不会被下载 - 如果在“BeforeBuild”任务中这样做,它将正常工作。
这给我带来了一个先有鸡还是先有蛋的问题,因为我必须先执行构建以生成我想要包含的文件。
有人有解决办法吗?
(附言:目前使用mage.exe生成clickonce部署不是一个选项,必须使用发布目标完成)
4个回答

3
请查看这篇文章。我相信这就是我在这里设置部署过程时使用的文章。
我们需要将非 .net dlls 包含在 bin 目录中,以使我们的应用程序正常工作,它们已经构建好了,所以我没有你的“需要先构建”的问题。然而,我会将“包含”作为 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 数据库中设置了一些值。

需要进行一些试错,但最终可行。请注意,你可以添加任意数量的 AdditionalPublishFile。


已验证此方法可用于我的ClickOnce应用中,并且我认为这比将生成的文件包含在构建的“Content”部分中要好得多。 - Alex Marshall

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

所以你想要包含由构建生成的文件。

我认为,尽管你说这不是一个选项,但唯一的解决方案是通过 Mage 或 MageUI 手动部署。只有这样,你才能在构建和部署之间掌控局面。 你不能创建一个批处理文件来部署你的应用程序吗?你可以在 Post-Build 事件中执行批处理文件。


0
尝试这样做:构建您的项目。然后进入“应用程序文件”对话框,单击“显示所有文件”。它是否显示您想要包含的文件?如果是,请将它们标记为包括(必需)。它应该保留这些文件,并将它们包含在部署中。
RobinDotNet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接