C#项目文件与源程序不在同一级目录时Resources的解决办法

在多人开发的环境,可能为了同步方便把C#的项目文件.csproj移出源程序所在目录,这样在项目中使用Resources时会遇到这些麻烦(附解决办法):

1. 项目属性里Resources和Settings页会提示“This project does contain a default resources/settings file, Click here to create one.”,也就是说项目文件找不到缺省的Resources和Settings文件。

原因:因为IDE只会在项目文件所在目录的Properties子目录查找这两个信息,由于只把项目文件移出,真正的Properties目录仍在源码位置,所以IDE会提示找不到这两组资源。

解决办法:不用去管它,仍使用源码目录下的Properties,后面提到如何使用。

2. 点击上面两个提示的链接会在项目文件所在目录的Properties子目录重新创建这两组资源,这违背了我们的初衷——只移出项目文件。

原因解决办法同第1点。

3. 假设原来项目文件放在“Srcs\UI\MainFrame”目录下,指定的Default namespace为“Lordong.UI.MainFrame”,现在只将.csproj移出到Srcs目录下,在打开项目文件调整好源码的相对路径后打开项目,会发现项目下的源码都在UI\MainFrame目录下,此时双击打开UI\MainFrame\Properties\Resources.resx,从Resources拖一个图片到Resources.resx窗体,保存后打开Resources.Designer.cs文件,会发现它的namespace是“Lordong.UI.MainFrame.UI.MainFrame.Properties”,而不是我们想要的“Lordong.UI.MainFrame.Properties”。Settings.settings也会存在这个问题。

原因:IDE会自动根据Resources.resx生成Resources.Designer.cs文件,使用项目的Default namespace加上Resources.Designer.cs所在的目录结构。

解决办法:把项目的Default namespace改成不包括源码所在的目录结构,比如由“Lordong.UI.MainFrame”改成“Lordong”。

4. 在编辑菜单或Toolbar时,如果想选择Image会提示出错或找不到已经添加的资源,同时会在项目所在目录下新建Properties子目录并新建Resources.resx文件组。

原因:IDE会试图去找第1点里提到的缺省的Resources,找不到会自动创建,而不会去找UI\MainFrame\Properties目录下的Resources。

解决办法:不要在设计界面时设置Image,在设计完界而后保存一下,然后直接打开窗体的Designer.cs文件,找到如“this.toolStripButton1.Image = ((System.Drawing.Image)(resources.GetObject("toolStripButton1.Image")));”格式的项,修改为“this.toolStripButton1.Image = global::Lordong.UI.MainFrame.Properties.Resources.对应的资源名;”,菜单前如果需要添加图标,也用此法,手工添加一个Image的设置项,添加好后保存,然后回到设计界面就可以看到图标已经设置好了。

如果不小心在项目所在目录新建了Properties子目录并且新建了Resources.resx文件组,则需要在IDE中从项目文件里删除新添加的Resources.resx文件,全部保存后以文本方式打开.csproj文件,删除“<Folder Include="Properties\" />”项即可。

Tags:

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。