2010-10-22 212 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>元素可以通过文本编辑器添加到共享项目中。然后在构建期间将它们并入外围项目。

    (道歉的超链接。我只想重新发布了清晰的答案,但计算器编辑打击这个,删除重复的答案救你脱离???)

    相关问题