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> 
相關問題