2010-07-09 46 views
13

我的公司使用一些數據庫表,網頁前端和「導出」應用程序的組合來處理我們的網站中的字符串資源。我需要resx Designer.cs文件嗎?

當我們使用VS2008時,導出應用程序用得很好,但是自從切換到VS2010以來,資源在解決方案資源管理器中有一個「下面」的designer.cs文件。

問題是「導出」應用程序只生成.resx文件而不是底層的designer.cs文件。

那麼,有沒有一種方法,沒有那些designer.cs文件,或者某種方式自動重新生成(或者甚至是一些命令出口申請可以調用重新生成)

回答

7

從MSDN我們有:

Compiling Resources into Assemblies

當你建立你的應用程序時,Visual Studio調用 resgen.exe的工具來轉換您的應用程序資源資源分爲 內部 類稱爲資源。該類包含在Resources.Designer.cs 文件中的 文件,該文件嵌套在Solution Explorer中的 Resources.resx文件下。資源類 將所有項目資源封裝爲靜態只讀屬性,作爲在運行時提供強類型資源的一種方式。 當你通過Visual C#打造 IDE,所有封裝的資源 數據,包括那個被嵌入到.resx文件 和鏈接文件的資源 ,編譯 直接進入應用程序組件 (.exe文件或.dll文件)。在其他 單詞中,Visual C#IDE總是使用 /resource編譯器選項。如果從命令行生成 ,則可以使用 指定/ linkresource編譯器 選項,該選項使您可以將 資源部署在與 主應用程序程序集不同的文件中。這是一種 高級方案,在某些罕見情況下僅需要 。

+1

謝謝,有時它只是知道要搜索什麼:) 我會在週一早上看看。 – 2010-07-09 23:56:34

+1

太棒了,我只是改變了我的導出應用程序來運行resgen工具,如果在.resx文件所在的文件夾中還存在.designer.cs文件(> 0字節)。 (我不能等到星期一,好奇心越來越好) – 2010-07-10 21:10:00

+0

嗯,這並不正確。它編譯得很好,但是當我運行它時,應用程序崩潰了。所以,我嘗試了一種幾乎可行的不同方法。我已經開始了一個新問題,因爲這是一個稍微不同的問題。 http://stackoverflow.com/questions/3230585/run-custom-tool-for-resx-files-in-mvc2-project-from-an-external-application-sc – 2010-07-12 17:16:59

11

我有一個問題,VS 2010不會重新生成Designer.cs文件,並且無法在別處找到解決方案。

雖然我能夠重新生成它們,但無需轉到命令行。

要解決該問題在Visual Studio 2010中我做了以下內容:

  1. 刪除的文件Designer.cs
  2. 右主RESX文件
  3. 選擇點擊Run Custom Tool

這重建了Designer.cs文件。

。希望可以幫助別人的未來..

+1

當然,自定義工具屬性的resx文件應該包含類似'PublicResXFileCodeGenerator'的東西(並且只要您編輯該字段,就會自動生成設計器文件) – ekkis 2014-09-19 00:53:10

+0

我們使用自定義工具來同步來自我們的語言服務器的resx文件。這個技巧非常適合VS重建相關代碼隱藏文件! – 2015-07-02 13:49:48

1

如果你喜歡構建項目時自動生成* .resx文件的*了.Designer.cs文件,下面的方法爲我們工作和它可能會爲你工作,以及:

  1. 閉上你的解決方案
  2. 開放爲XML文件要在其中自動生成設計師文件的項目文件。請注意,您需要將其作爲XML文件加載。您無法通過項目屬性頁面編輯這些設置。
  3. 添加目標到項目如下:
 
<Target Name="GenerateDesignerFiles"> 
    <Message Text="Deleting old Designer Files..."/> 
    <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).resources')"/> 
    <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')"/> 
    <Message Text="Generating Designer Files..."/> 
    <GenerateResource 
     Sources="@(EmbeddedResource)" 
     StronglyTypedLanguage="C#" 
     StronglyTypedClassName="%(Filename)" 
     StronglyTypedNamespace="@(EmbeddedResource->'%(CustomToolNamespace)')" 
     StronglyTypedFileName="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')" 
     PublicClass="true" 
     > 
    </GenerateResource> 
    <Message Text="Generating Designer Files complete."/> 
</Target> 
  • 找到名爲 「BeforeBuild」 目標。這個目標可能會被註釋掉(默認)。
  • 修改「BeforeBuild」的目標如下:
  •  
    <Target Name="BeforeBuild"> 
        <CallTarget Targets="GenerateDesignerFiles"/> 
    </Target> 
    

    該解決方案是基於所有的資源文件被列爲「EmbeddedResource」項目文件的的ItemGroup,例如內

     
    <ItemGroup> 
        <EmbeddedResource Include="Resources\Creditor\Display_Creditor.resx"> 
        <Generator>PublicResXFileCodeGenerator</Generator> 
        <LastGenOutput>Display_Creditor.Designer.cs</LastGenOutput> 
        <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace> 
        </EmbeddedResource> 
        <EmbeddedResource Include="Resources\InboundEmail\Tooltip_InboundEmailDetails.resx"> 
        <Generator>PublicResXFileCodeGenerator</Generator> 
        <LastGenOutput>Tooltip_InboundEmailDetails.Designer.cs</LastGenOutput> 
        <CustomToolNamespace>Acme.Web.Resources.InboundEmail</CustomToolNamespace> 
        </EmbeddedResource> 
        <EmbeddedResource Include="Resources\Creditor\Tooltip_CreditorDetails.resx"> 
        <Generator>PublicResXFileCodeGenerator</Generator> 
        <LastGenOutput>Tooltip_CreditorDetails.Designer.cs</LastGenOutput> 
        <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace> 
        </EmbeddedResource> 
    </ItemGroup> 
    

    聲明:這已經過Visual Studio 2013和C#項目的測試。它可能會或可能不適用於其他項目和/或其他版本的Visual Studio。

    +0

    它適用於VS2015。稍微有點評論:我不得不提供'CustomToolNamespace',否則它會生成一個'.cs'文件,其名稱等同於'.resx'文件。 – Caramiriel 2016-01-25 09:18:18

    0

    試試這個:

    • 上的resx文件右擊
    • 點擊屬性
    • 設置屬性:
    • 複製到輸出目錄:複製始終
    • 自定義工具:PublicResXFileCodeGenerator

    保存並重新構建。 問題解決了。