如何在一个解决方案中的项目之间使用共享资源文件?

时间:2010-10-22 09:01:45

标签: c# .net visual-studio embedded-resource solution-explorer

我的资源文件有问题。

我有两个项目的解决方案。第一个项目包含ImageResource.resx文件,其中包含我使用的图像。此项目中的每个Form都可以从设计器访问此文件。但我可以在设计器ImageResource.resx文件中看到它从第二个项目中使用它(参考第二个项目存在)。

我添加了ImageResource.resx文件作为第二个项目的链接。我在设计师看到了它!但是,当我在第二个项目中使用来自此资源的图像时,Visual Studio修改了我的原始文件(它设置名称空间,以及其他..),我的解决方案中断了。此外,Visual Studio告诉我,ImageResource.resxfirst_project.dll

中存在second_project.dll {{1}}

任何人都可以帮助我如何在项目之间正确使用共享资源?

5 个答案:

答案 0 :(得分:31)

  1. 共享资源的正确方法是创建全局共享项目。创建一个名为 Resources 的新项目:
  2. Solution Explorer, showing an example solution, which contains a project named *Resources*

    1. 接下来,我们必须为项目添加一些资源(例如图标)。像往常一样这样做。转到项目设置,选择选项卡资源添加现有文件... 到项目中。我们可以看到该图标已添加到项目中并被复制到本地文件夹:
    2. 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

      1. 下一步包括将此图标添加到其他项目。请注意重要区别,您需要将此图标添加为链接

        添加链接可避免资源重复。在同一解决方案中创建一个新项目并为其命名,例如主要。在这个新项目中创建一个文件夹,将其命名为 Resources (我们的逻辑名称)。然后右键单击此文件夹,选择添加现有项... ,然后从共享项目文件夹中选择图像文件。请务必在此处使用添加为链接!如果正确完成,新添加文件的图标将略有不同(见下文):

      2. 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

        1. 现在我们必须将此文件的 Build Action 设置为 。为此,请选择文件并转到属性窗口。为 Build Action 选择 None 。我们需要这样做以避免将此图标嵌入到程序集中:
        2. In Solution Explorer, change the *Main* project's puppy resource's properties. Choose a Build Action of *None*

          1. 最后,我们需要将链接文件添加到相应项目的 Resources 中。为刚刚添加文件的项目打开项目 Properties 。选择资源选项卡并将链接文件拖到那里:
          2. Drag the linked image from the Solution Explorer's *Main* project's resources to the *Main* project's resources tab's viewing pane

            这是在项目之间共享图标必须执行的五个简单步骤。你可能会问“这有什么好处?”好处是:

            • 我们将资源存储在一个地方,
            • 用新图标替换图标很容易。

答案 1 :(得分:2)

这对我没有用,我找到了另一种(VS2015 +)方法。  见https://stackoverflow.com/a/45471284/4151626

简而言之,共享项目直接包含在外围项目中。因此,即使IDE不支持共享项目中的<Resource>元素。可以通过文本编辑器将<Resource>个元素添加到共享项目中。然后在构建期间将它们合并到外围项目中。

(为超链接道歉。我只是为了清晰起见重新发布答案,但是stackoverflow编辑严厉打击这个,删除重复的答案以便将你从???中删除。)

答案 2 :(得分:1)

您可以使用符号链接将文件共享到多个文件夹吗?

windows:

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.

答案 3 :(得分:1)

如果资源文件在项目之间真正共享,则应将其放在共享项目中。

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

答案 4 :(得分:0)

如果资源不是公开,则无法看到该资源,并且默认设置为“朋友”。您可以在可视设计器(右上角)中设置“访问修改器”。