Dan*_*aar 20 c# resources winforms
我有一个相当大的解决方案,里面有很多项目.理想情况下,我想创建一个Resources项目,其中包含我在整个应用程序中需要的所有嵌入图标.
我读过人们通过代码引用它们的文章,但是有可能在设计器中访问这个项目的资源吗?换句话说,我想在设计器中单击表单的BackgroundImage属性时选择资源.
如果没有,在尝试将我的资源与主项目分离时,我应该考虑哪种架构?每次修改一行或两行代码时,释放100mb可执行文件可能不是一个明智的想法.
我找到了一种在许多项目之间共享资源文件并保持 VS Designer 兼容性(适用于 VS 2012)的工作方法,它并不复杂:
在源项目中创建一个新的资源文件(在我的示例中命名为SharedResources.resx)
在 Designer 中打开SharedResources.resx并更改Access Modifier
为Public
使用记事本打开.csproj
新项目文件,并将以下代码添加到包含<ItemGroup>
: 的文件中<compile Include="MyForm.cs">
(将包含 *.resx 和 *.Designer.cs 作为链接,无需编译并具有特殊命名空间)
<EmbeddedResource Include="MY_SOURCE_PROJECT_FOLDER\Properties\SharedResources.resx">
<Generator>PublicResXFileCodeGenerator</Generator>
<Link>SharedResources.resx</Link>
<LastGenOutput>SharedResources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
<CustomToolNamespace>MY_SOURCE_PROJECT_NAMESPACE.Properties</CustomToolNamespace>
</EmbeddedResource>
<None Include="MY_SOURCE_PROJECT_FOLDER\Properties\SharedResources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>SharedResources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</None>
Run Code Online (Sandbox Code Playgroud)替换MY_SOURCE_PROJECT_FOLDER
为包含资源的项目的相对路径,并替换MY_SOURCE_PROJECT_NAMESPACE
为生成文件中指定的命名空间SharedResources.Designer.cs
(应该是全局项目的命名空间)
享受 !
警告 :
有时 VS 在 **.Designer.cs* 共享文件中进行其他自动更改,这会导致失败,请确保属性ResourceManager
仍然指向根共享文件。
重要的 :
据我所知,您无法在设计器中操作其他程序集的资源。仅当前项目中的那些。
\n\nHere\xe2\x80\x99s 我会如何做:
\n\n创建一个类库项目。在库中,添加 | 新商品 | 资源文件。将资源(图像、图标)添加到该文件(例如:Resource1.resx)。在该库的类中添加返回资源的公共成员。
\n\npublic static class Class1\n{\n public static Bitmap Image1 { get { return Resource1.Image1; } }\n public static Bitmap Image2 { get { return Resource1.Image2; } }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n现在,在您的项目中引用类库,现在可以在运行时以编程方式设置资源。
\n\npublic Form1()\n{\n InitializeComponent();\n\n this.BackgroundImage = ClassLibrary1.Class1.Image1;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n但不幸的是你不能\xe2\x80\x99使用设计器。:( 但是,如果您不对 dll 中的资源进行任何更改,则通过这样做,您将不需要重新分发该 dll。
\n 归档时间: |
|
查看次数: |
8169 次 |
最近记录: |