Clickonce 发布 VS 2012 停止的其他文件
Posted
技术标签:
【中文标题】Clickonce 发布 VS 2012 停止的其他文件【英文标题】:Click-once publish addtional files stopped with VS 2012 【发布时间】:2013-02-13 06:25:49 【问题描述】:我使用在这个问题中找到的解决方案定制了我的项目:
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 后它就坏了。
【问题讨论】:
为什么所有关于 MSBuild 的问题都没有引起那么多关注?? 很高兴我找到了这篇文章 - 我正要实现这个方法 - blogs.msdn.com/b/mwade/archive/2008/06/29/… @tofutim 你是如何让它工作的,这个解决方案对我来说不适用于 MsBuild。 我放弃了 ClickOnce,现在使用 InstallAware。 【参考方案1】:我发现您的问题令人费解,因为我以前从未见过有人使用 ClickOnce 做到这一点,因此我与 Microsoft 的 ClickOnce 人员进行了交谈。他说你正在做的事情不受支持,所以这不是他们会测试的东西。 msbuild 有多项更改可能会破坏您正在做的事情。
您是否正在尝试获取与部署中包含的辅助引用关联的文件?换句话说,您有一个主项目,该项目引用了通过构建第二个项目创建的另一个程序集,并且第二个程序集具有内容文件,您希望它们包含在您的项目中吗?
如果您正在尝试这样做,您应该考虑将这些文件链接到主项目。为此,您可以将现有项目添加为链接,并将其指向第二个项目中的内容。然后在构建第一个项目时将包含内容。
【讨论】:
谢谢罗宾,我以为没有人会注意到这个问题:),我编辑了我的问题以添加更多详细信息,但是,我没有尝试按照您的建议链接程序集,但我觉得就像它类似于将程序集直接添加到项目中(不引用它们)。 不一样,因为当您链接到程序集时,它会在您构建它们时选择新版本。如果您将它们复制到项目并在那里添加对它们的引用,除非您更新它们,否则它们不会得到更新。 似乎 ClickOnce 和 VS 在识别来自第二个程序集的内容文件时应该是对称的。 我要站出来说 ClickOnce 团队在这方面真的是搞砸了。有很多场景需要在引用的项目中包含文件。为什么我需要遍历并链接所有依赖项中的文件?我很想听听这种设计效率低下的问题的解释。【参考方案2】:将 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>
【讨论】:
以上是关于Clickonce 发布 VS 2012 停止的其他文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 MSBuild 从 Visual Studio 2013 命令行发布 Clickonce 找不到 SignTool.exe
ClickOnce 安装程序无法安装 SQLLocalDb2012,因为 sqlcmdnutils.msi 自最初发布以来已更改
winform_使用ClickOnce生成安装程序包页面&程序发布新版本通知客户端更新