2010-10-22 211 views
13

我有資源文件的問題。如何在一個解決方案中的項目之間使用共享資源文件?

我有兩個項目的解決方案。第一個項目包含ImageResource.resx文件和我使用的圖像。此項目中的每個Form都可以從設計器訪問此文件。但我可以在設計器ImageResource.resx文件中看到使用它從第二個項目(參考第二個項目是目前)。

我已經加入了ImageResource.resx文件作爲鏈接到我的第二個項目。我在設計師看到它!但是,當我在第二個項目中使用此資源中的圖像時,Visual Studio修改了我的原始文件(它設置了名稱空間和其他..)並且我的解決方案中斷了。此外Visual Studio中告訴我,ImageResource.resx存在於這兩個dll的first_project.dllsecond_project.dll

任何人可以幫助我如何正確使用項目之間共享資源?

回答

28
  1. 共享資源的正確方法是創建一個全局共享的項目。與名稱創建一個新的項目資源

Solution Explorer, showing an example solution, which contains a project named *Resources*

  • 下一步我們必須添加一些資源(如圖標)到項目中。像往常一樣這樣做。轉到項目設置,選擇標籤資源添加現有文件...到項目中。我們可以看到,該圖標被添加到項目中,被複制到本地文件夾中:
  • For example, the Resources project's Resources tab shows a picture of a puppy, and the Solution Explorer shows that the Resources project's Resources folder includes the picture of the puppy

  • 下一步包括加入該圖標與其它的項目(S)。請注意最重要的區別,您需要將此圖標添加爲鏈接

    添加爲紐帶,避免資源重複。在同一個解決方案中創建一個新項目,並將其命名爲主要。在這個新項目中創建一個文件夾,命名爲Resources(我們的目的是邏輯名稱)。然後右鍵單擊該文件夾,選擇添加現有項目...並從共享項目文件夾中選擇圖像文件。請務必在此處使用Add As Link!如果做得正確,新添加的文件的圖標可能會略有不同(見下文):

  • In the *Add Existing Item* dialog, choose the *Add As Link* option from the *Add* button's drop-down list

    新增資源的圖標必須看起來像這樣

    In Solution Explorer, the Main project's icon for the puppy Resource has an arrow on the icon, whereas the Resources project's icon for the puppy Resource does not have an arrow on the icon

  • 現在我們必須將此文件的構建動作設置爲。爲此,請選擇文件並轉至屬性窗口。有選擇構建行動。我們必須這樣做是爲了避免嵌入該圖標到組件:
  • In Solution Explorer, change the *Main* project's puppy resource's properties. Choose a Build Action of *None*

  • 最後,我們需要鏈接的文件對應的添加到資源項目。打開項目屬性爲我們剛添加文件的項目。選擇資源選項卡,然後拖動鏈接的文件有:
  • Drag the linked image from the Solution Explorer's *Main* project's resources to the *Main* project's resources tab's viewing pane

    這些都是你必須執行的項目之間共享圖標的五個簡單的步驟。你可能會問:「這有什麼好處?」其優點是:

    • 我們存儲資源在一個地方,並
    • 這是很容易用新更換的圖標。
    +1

    我已經將答案移到了stackoverflow .. – Yuriy 2012-04-30 20:07:19

    +0

    這個答案似乎缺少一些文本? – 2014-01-03 03:42:05

    +0

    請允許我問「這有什麼好處?」 :-) – 2014-01-28 06:30:10

    1

    你可以使用一個符號鏈接到文件共享到多個文件夾?

    窗口:

    mklink linked_location\ImageResource.resx original_location\ImageResource.resx 
    
    
    C:\Users\preet>mklink 
    Creates a symbolic link. 
    
    MKLINK [[/D] | [/H] | [/J]] Link Target 
    
         /D  Creates a directory symbolic link. Default is a file 
           symbolic link. 
         /H  Creates a hard link instead of a symbolic link. 
         /J  Creates a Directory Junction. 
         Link specifies the new symbolic link name. 
         Target specifies the path (relative or absolute) that the new link 
           refers to. 
    
    1

    如果一個資源文件項目之間真的共享,你應該把它放在一個共享的項目。

    Solution 'Sample' 
        Project Sample.Data 
        Project Sample.Business 
        Project Sample.UI 
        Project Sample.Resource //shared resources are put in a shared project 
    
    +0

    項目有你說的相同結構。問題是我在設計器的'Project Sample.UI'中看不到'Project Sample.Resource.ImageResource.resx'。我必須去'myForm.designer.cs'並手動輸入'button.Image = Sample.Resource.ImageResource.SomeImage'。然後當VS重建'myForm.designer.cs'行時,我在其中鍵入圖像button.Image =((System.Drawing.Image)(resources.GetObject(「SomeImage.Image」)));和VS自動插入(複製)從ImageResource.resx文件SomeImage到特定形式的資源文件.. :( – Yuriy 2010-10-22 09:32:37

    +0

    看到我對這個問題的質疑.. – Yuriy 2012-04-26 13:10:27

    +0

    @Yuriy:鏈接被破壞(也許是因爲我在中國,有些網站被政府封鎖)。更多關於我的回答,我認爲你有一些選項設置錯誤(但抱歉,我不記得關於設置的更多細節),我曾經參與過一個項目,它在幾個項目之間共享資源,就像你的解決方案一樣。我們的程序員使用這種方式,就像我在答案中所說的那樣,它確實有效。 – 2012-04-27 02:12:49

    0

    你看不到的資源,如果它不是公共,它是默認設置爲「朋友」。您可以在可視設計器(右上角)中設置「訪問修飾符」。

    +0

    看到我的這個問題unswer .. – Yuriy 2012-04-26 13:10:20

    0

    這不適合我,我發現了另一種方法(VS2015 +)。 請參閱https://stackoverflow.com/a/45471284/4151626

    總之,共享項目直接包含在外圍項目中。因此,即使IDE在共享項目中不支持<Resource>元素。 <Resource>元素可以通過文本編輯器添加到共享項目中。然後在構建期間將它們併入外圍項目。

    (道歉的超鏈接。我只想重新發布了清晰的答案,但計算器編輯打擊這個,刪除重複的答案救你脫離???)

    相關問題