5

我用一个解决方案,我在这个问题上找到定制我的项目:点击一次发布addtional文件停止使用VS 2012

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

+0

为什么有关MSBuild的所有问题并不需要那么多的关注? – 2013-02-16 11:49:10

+0

很高兴我发现了这篇文章 - 我正要实现这种方法 - http://blogs.msdn.com/b/mwade/archive/2008/06/29/how-to-publish-files-which-are-not -in-the-project.aspx – tofutim 2014-01-16 05:58:39

+0

@tofutim你是如何得到这个工作的,这个解决方案对我来说不适用于MsBuild。 – 2016-02-02 17:48:30

回答

1

我发现你的问题,因为莫名其妙我从来没有见过任何人之前做到这一点使用ClickOnce,所以我跟ClickOnce的家伙在微软这件事后打破。他说,你所做的不支持,所以这不是他们已经测试过的。 msbuild有多处更改可能会破坏你正在做的事情。

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

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

+0

谢谢罗宾,我以为没有人会注意到这个问题:),我编辑了我的问题以添加更多细节,但是,我没有尝试按照您的建议链接程序集,但我觉得它与添加直接组装到项目中(而不是引用它们)。 – 2013-03-06 05:00:45

+0

这不一样,因为当你链接到程序集时,它会在构建它们时拾取新版本。如果您将它们复制到项目并在其中添加对它们的引用,那么除非您更新它们,否则它们不会更新。 – RobinDotNet 2013-04-07 00:59:21

+2

似乎ClickOnce和VS在识别来自第二个程序集的内容文件时应该是对称的。 – tofutim 2014-01-16 05:55:30

1

移动的CreateItem任务的BeforeBuild步,取下触摸任务:

<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> 
相关问题