使用VS 2012停止的Click-once发布addtional文件

Nou*_*uny 6 msbuild clickonce publish visual-studio-2010 visual-studio-2012

我使用我在这个问题中找到的解决方案来定制我的项目:

为什么Visual Studio中的ClickOnce不从依赖程序集部署内容文件?

<ItemGroup>
<AdditionalPublishFile Include="$(OutputPath)\**\*.rpt">
  <Visible>False</Visible>
</AdditionalPublishFile>
</ItemGroup>
<Target Name="BeforePublish">
  <Touch Files="@(IntermediateAssembly)" />
  <CreateItem Include="@(AdditionalPublishFile)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(extension);IsDataFile=false">
    <Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" />
  </CreateItem>
</Target>
Run Code Online (Sandbox Code Playgroud)

它在VS 2010中运行良好,直到我升级到VS 2012,其他文件未包含在应用程序清单中!因此,当用户安装应用程序时,应用程序主文件夹中缺少所提到的文件.

VS 2012有什么变化?或者更改是在MSBuild中?

编辑:

我提到了最初的问题,从我得到了这个想法,基本上我使用依赖注入来加载一些程序集,这意味着我的项目和程序集之间没有硬引用,所以点击一次部署不会考虑那些程序集,它迫使我将它们添加到项目中,或者使用上面提到的解决方案,我选择了上面提到的解决方案,因为它是不可见且容易的.

但是在迁移到VS 2012后它被打破了.

Rob*_*Net 1

我发现你的问题令人困惑,因为我以前从未见过有人使用 ClickOnce 这样做,所以我与 Microsoft 的 ClickOnce 人员讨论了这个问题。他说你所做的事情不受支持,所以他们不会对此进行测试。msbuild 有多个更改可能会破坏您正在做的事情。

您想要做的是获取与部署中包含的辅助引用关联的文件吗?换句话说,您有一个主项目引用通过构建第二个项目创建的另一个程序集,并且第二个程序集具有内容文件,并且您希望它们包含在您的项目中?

如果这就是您想要做的,您应该考虑将这些文件链接到主项目。为此,您可以添加现有项目作为链接,并将其指向第二个项目中的内容。然后,当您构建第一个项目时,该内容将被包含在内。

  • 似乎 ClickOnce 和 VS 在识别第二个程序集中的内容文件时应该是对称的。 (2认同)
  • 我要站出来说,ClickOnce 团队在这方面真是搞砸了。在很多情况下,您需要将文件包含在引用的项目中。为什么我需要检查并链接所有依赖项中的文件?我很想听听对设计中这种令人毛骨悚然的低效率的解释。 (2认同)