我有与它的许多项目中一个相当大的解决方案。 理想情况下,我想创建一个包含所有嵌入的图标,我需要在我的应用程序中的资源项目。
我读过那里的人都引用它们通过代码的文章,但有可能获得在设计获得这个项目的资源? 换句话说,我想选择点击在设计窗体的BackgroundImage属性时的资源。
如果没有,什么样的架构试图从我的主要项目脱钩我的资源时,我应该考虑的? 这可能不是一个聪明的想法释放100MB的可执行文件,每次我修改一行代码或两个。
我有与它的许多项目中一个相当大的解决方案。 理想情况下,我想创建一个包含所有嵌入的图标,我需要在我的应用程序中的资源项目。
我读过那里的人都引用它们通过代码的文章,但有可能获得在设计获得这个项目的资源? 换句话说,我想选择点击在设计窗体的BackgroundImage属性时的资源。
如果没有,什么样的架构试图从我的主要项目脱钩我的资源时,我应该考虑的? 这可能不是一个聪明的想法释放100MB的可执行文件,每次我修改一行代码或两个。
从最好的,我可以告诉你不能操纵在设计师其他组件的资源。 只有从当前项目的一个(或多个)。
这是我会怎么做:
创建一个类库项目。 在图书馆,添加| 新建项目| 资源文件。 资源(图片,图标)添加到该文件(例如:Resource1.resx)。 在该库中添加类返回的资源公共成员。
public static class Class1
{
public static Bitmap Image1 { get { return Resource1.Image1; } }
public static Bitmap Image2 { get { return Resource1.Image2; } }
}
现在,在你的项目中引用的类库,现在可以通过编程方式在运行时设置的资源。
public Form1()
{
InitializeComponent();
this.BackgroundImage = ClassLibrary1.Class1.Image1;
}
但不幸的是你不能使用设计。 :(不过,这样做你会不会需要重新分发该DLL,如果你不做出它的资源的任何变化。
我发现有许多项目之间的资源文件,并保持VS设计师兼容性(与VS 2012工程)工作方式,它没有复杂的:
在源项目中创建一个新的资源文件(在我的例子SharedResources.resx命名)
在设计器中打开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>
更换MY_SOURCE_PROJECT_FOLDER
包含资源项目的相对路径和替代MY_SOURCE_PROJECT_NAMESPACE
在生成的文件中指定的命名空间SharedResources.Designer.cs
(应该是你的全球项目的命名空间)
请享用 !
警告 :
有时VS使得在其他自动变更**。* Designer.cs共享文件,这将使故障,请确保财产ResourceManager
仍然指向根共享文件。
重要提示:
我想创建一个包含所有嵌入的图标,我需要在我的应用程序资源项目....我想在设计窗体的BackgroundImage属性时,点击选择资源。
您可以使用的资源从另一个组件,但不幸的是,原因解释下面你不能经过设计师做。
在你的资源项目中添加一个形式一个PictureBox和设置BackgroudImage。 这仅仅是为了一个图像添加到项目Resouces.resx和Resouces.Designer.cs。 我们可以用图片框删除表中的图像将作为一个资源之后。
在资源项目转到Resouces.Designer.cs及其类别范围转变为公共和内部图像的方法范围转变为公共:
public static System.Drawing.Bitmap SO_down {
get {
object obj = ResourceManager.GetObject("SO down", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
在消耗资源DLL需要未设置BackGroundImages利用自身的资源项目:
之前:
this.pictureBox1.BackgroundImage = global::WinFormWithSatelliteResources.Properties.Resources.SO_down;
后:
this.pictureBox1.BackgroundImage = global::SatResources.Properties.Resources.SO_down;
什么样的建筑,我应该考虑尝试从我的主要项目脱钩我的资源是什么时候? 这可能不是一个聪明的想法释放100MB的可执行文件,每次我修改一行代码或两个。
这些天,大多数企业都乐于依靠互联网。 你知道你可以版本的资源,像MyStyle22022013.CSS和化网页浏览器不会获取资源,如果他们已经有一个了最新的副本。 我提出了一个类似的策略,把所有这些图像资源网上,这样你可以在无需打包和部署它们更新资源。
当你想想看这个样子,为什么连一个完整的资源组装麻烦? 迷宫也只是从互联网上拉资源,从文件系统中使用它们。
如果(下载资源)的初始网络连接是不是一种选择@jross答案似乎是完全可行的。 这些天来,虽然我不想像你打算发布此光盘。