6

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

为什么 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>

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

VS 2012 发生了什么变化?或者也许更改在 MSBuild 中?

编辑:

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

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

4

2 回答 2

1

我发现您的问题令人费解,因为我以前从未见过有人用 ClickOnce 做到这一点,因此我与 Microsoft 的 ClickOnce 人员进行了交谈。他说你正在做的事情不受支持,所以这不是他们会测试的东西。msbuild 有多项更改可能会破坏您正在做的事情。

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

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

于 2013-03-04T07:19:07.197 回答
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>
于 2016-04-05T16:58:59.607 回答