Clickonce发布使用VS 2012停止的其他文件

时间:2013-02-13 06:25:49

标签: visual-studio-2010 msbuild visual-studio-2012 clickonce publish

我使用我在此问题中找到的解决方案来自定义项目:

Why doesn't ClickOnce in Visual Studio deploy content files from dependent assemblies?

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

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

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

编辑:

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

但迁移到VS 2012后它已被破坏。

2 个答案:

答案 0 :(得分:1)

我发现你的问题令人费解,因为我之前从未见过有人用ClickOnce做过这个,所以我和微软的ClickOnce人谈过这件事。他说,你所做的不支持,所以这不是他们会测试的东西。 msbuild有多处更改可能会破坏您正在执行的操作。

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

如果您正在尝试这样做,则应考虑将这些文件链接到主项目。为此,您可以将现有项添加为链接,并将其指向第二个项目中的内容。然后,在构建第一个项目时,将包含内容。

答案 1 :(得分:1)

将CreateItem任务移至BeforeBuild步骤并删除Touch任务:

<ItemGroup>
  <AdditionalPublishFile Include="$(OutputPath)\**\*.rpt">
    <Visible>False</Visible>
  </AdditionalPublishFile>
</ItemGroup>
<Target Name="BeforeBuild">
  <CreateItem Include="@(AdditionalPublishFile)" AdditionalMetadata="TargetPath=%(RecursiveDir)%(Filename)%(extension);IsDataFile=false">
    <Output TaskParameter="Include" ItemName="_DeploymentManifestFiles" />
  </CreateItem>
</Target>