gpt4 book ai didi

winforms - Visual Studio 中跨项目共享 WinForms 资源的问题

转载 作者:行者123 更新时间:2023-12-03 22:53:04 25 4
gpt4 key购买 nike

我已将大型多项目解决方案中的所有图像资源移至专为共享资源创建的新项目。

添加对使用共享图像的其他项目的新引用按预期工作。下面所选按钮中的图像继续出现在设计器中,但有问题。

在 VS 设计器中,我无法在图像编辑器中选择共享资源,而必须手动编辑设计器代码。

更具体地说,在“图像编辑器”对话框(从现有控件的“图像”属性访问)中,我选择“从文件/资源​​中选择...”以弹出“选择资源”对话框(如图所示)。在那里,我曾经访问所有本地项目资源 (Resources.resx),我现在想添加对新共享资源项目的访问权限。理想情况下,我会在显示的下拉列表中添加第二个项目,该项目切换到共享资源项目的 resx。

如何才能做到这一点?有没有更好的办法?

alt text

最佳答案

我能够在项目之间共享一个 resx 文件并在 VS 2008 SP1 的设计器中使用它(我不知道其他版本)。与其他方法不同,这里的资源是静态和动态共享的,因此在运行时确实存在共享资源的一个副本。没有存储或内存浪费,并且易于维护大量项目。
按照指南告诉我它是否适合您:

  • 创建一个类项目资源;
  • 创建一个资源文件(转到项目的属性 -> 资源);
  • 将资源文件(默认 Resources.resx)移动到 项目的;
  • 重命名资源文件 Resources.resx -> GlobalResources.resx;
  • 修改资源文件修饰符为Public(双击资源文件,“Access Modifier”->“Public”);
  • 将任何资源文件复制到 根目录项目的;
  • 使用 将任何资源添加到资源文件中“添加现有文件”并在 上选择资源根项目目录。

  • 解决方案资源管理器中的项目应如下所示:
    enter image description here
    现在,在任何需要共享 resx 文件的项目中,请执行以下操作:
  • 添加“资源”项目作为dipendency;
  • 手动编辑项目文件(*.csproj)并在资源文件ItemGroup中添加以下几行(如果要查看,请创建本地资源文件):
     <ItemGroup>
    ...
    <EmbeddedResource Include="..\Resources\GlobalResources.resx">
    <Link>GlobalResources.resx</Link>
    <Generator>ResXFileCodeGenerator</Generator>
    <LastGenOutput>GlobalResources.Designer.cs</LastGenOutput>
    <CustomToolNamespace>Resources</CustomToolNamespace>
    </EmbeddedResource>
    ...
    </ItemGroup>

  • 显然,“包含”属性应该是 GlobalResources.resx 的正确相对路径。
  • 按照您的要求使用设计器中的资源。

  • 在我的项目中,执行此操作时会自动生成以下行并将其添加到项目中:
    <Compile Include="..\Resources\GlobalResources.Designer.cs">
    <Link>GlobalResources.Designer.cs</Link>
    <AutoGen>True</AutoGen>
    <DesignTime>True</DesignTime>
    <DependentUpon>GlobalResources.resx</DependentUpon>
    </Compile>
    如果未添加,请手动添加。
    现在项目在解决方案资源管理器中应该是这样的(相似文件应该有不同的标记):
    enter image description here
    最后两步:
  • 单击链接的“GlobalResources.resx”并将“属性”设置为“无”作为“BuildAction”。 “自定义工具命名空间”应该已经设置为“资源”;

  • enter image description here
  • 单击链接的“GlobalResources.Designer.resx”并将“属性”设置为“无”作为“BuildAction”。

  • enter image description here
    大功告成:此时,您真的应该能够使用您在设计器的共享 resx 中添加的资源,在您问题的“项目资源文件”对话框中选择“GlobalResources.resx”。据说它甚至在运行时也确实是共享的!在“属性”面板中,您应该会看到外部项目的完整命名空间和类。如果您删除对“资源”项目的依赖,它甚至不会编译。如果它对您不起作用,请坚持直到它起作用,以防万一告诉我指南哪里错了。它必须工作!让我知道。

    关于winforms - Visual Studio 中跨项目共享 WinForms 资源的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1100455/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com