2017-11-03 211 views
1

我在Visual Studio中有一個Windows Forms .NET應用程序。製作一個「可本地化」的表格添加一個嵌套在表單下的Form1.resx文件。我也想爲每個表單(Form1Resources.resx)添加一個單獨的.resx文件。這用於自定義特定於表單的資源,例如使用後面的代碼生成的消息。當在.NET應用程序中嵌套表單中的多個.resx文件時出現「兩個輸出文件名解析爲相同的輸出路徑」錯誤

這是設置如下:

Standard project files

這將是整潔巢.resx文件形式下的自定義(見this question有關窩如何做到這一點的詳細信息),如下所示:

Project files with nested resx file

然而,這會導致以下錯誤,當我構建應用程序:

兩個解決到相同的輸出路徑輸出文件名: 「OBJ \調試\ WindowsFormsApp1.Form1.resources」 WindowsFormsApp1

我猜的MSBuild使用一些邏輯來找到嵌套.resx文件和根據其父項生成.resources文件。有什麼辦法可以解決這個問題嗎?

請注意,無法將自定義消息添加到Form1.resx文件 - 這僅適用於特定於設計的資源,並且您在添加設計模式中保存更改時添加的所有資源都會被覆蓋。

+0

你應該解釋一下你是怎麼Form1Resources.resx嵌套表格下方。 – stijn

回答

1

錯誤來自GenerateResource任務,因爲兩個resx文件(msbuild中的EmbeddedResource項目)都傳遞了ManifestResourceName元數據值。這個值是由CreateManifestResourceNames任務創建的,假設當它看到具有DependentUpon元數據集的EmbeddedResource(對於Form1.cs)時,它總是生成'$(RootNamespace)。%(DependentUpon)'形式的東西:您的resx文件最終與WindowsFormsApp1.Form1作爲ManifestResourceName。這可以被視爲所有的Form1下的resx文件不整齊的原因:它不是爲了它的意思,需要額外的擺弄,而且可能會讓別人感到困惑,因爲他們通常會期望包含放置在下面的resx文件形式來包含它始終做的事情。

總之:有至少2種方法來解決此問題:

  • 有一個名爲CreateCustomManifestResourceNames目標這是指用於定製ManifestResourceName創作。對於你的情況可能有點太多了,只是提到它的完整性
  • 你自己手動聲明一個ManifestResourceName,它不會與其他(s)衝突;如果元數據已經存在它不會被

通用的代碼示例覆蓋:

<EmbeddedResource Include="Form1Resources.resx"> 
    <DependentUpon>Form1.cs</DependentUpon> 
    <ManifestResourceName>$(RootNamespace).%(FileName)</ManifestResourceName> 
    ... 
</EmbeddedResource> 
+0

很好的解釋 - 正是我想知道的。 –

相關問題