我有Resources.resx,用于生成Resources.designer.cs.应该检查Resources.designer.cs,还是可以依赖Visual Studio在需要时生成它?
我有一个脚本将文本文件转换为资源文件,这样我可以通过将不同语言的文本文件转换为不同的资源来支持多种语言.一旦我运行脚本来获取resx文件,我就必须运行自定义构建工具(如此处所述:链接到代码项目),以便创建Designer.cs使用新文件的文件.
按照我应该能够通过单击按钮构建整个项目的理念,如何删除我必须显式调用自定义构建工具以生成代码隐藏文件的步骤?
我已经尝试自动删除Designer.cs文件作为预构建步骤,因为我认为如果没有Designer.cs文件,但没有骰子,自定义构建工具会自动运行.
所以,我想在Visual Studio/msbuild中构建脚本:1)将文本转换为resx(完成)2)将resx文件移动到适当的目录(完成)3)使用自定义构建工具创建designer.cs文件(未完成) )
这是最后一步......
我有一个生成.resx资源文件的程序.这些资源文件用于其他项目,与生成资源文件的项目不在同一解决方案中.
我现在想知道,如果可以designer.cs从资源文件生成文件,那么您可以直接访问资源而无需使用resxresourcereader.
我们使用PublicResXFileCodeGenerator从*.resx文件生成*.Designer.cs文件.目前,无论何时保存.resx或右键单击并选择"运行自定义工具",都会生成这些.
我希望能够在构建时自动运行此工具,而不是必须手动执行.Designer.cs文件不会保留在源代码管理下,因此每次有人更改资源时,或者首次结帐时都必须手动生成它们.如果文件是在每个构建版本上生成的,那就没关系,因为它们不是很大,但只有在它们过期时再做它才会更酷.
注意:这将是Visual Studio构建的一部分,而不是命令行构建.我找到了另一个问题的答案,说可以从VS内部,而不是命令行:在构建时运行Visual Studio自定义工具
我们有一个SQL文件,它是我们解决方案中的嵌入式资源.当sql文件发生更改并且我们单击debug时,如果没有更改实际的C#代码,则解决方案不会使用嵌入式资源重建项目.
我已经遇到过其他解决方案的这个问题,只要我记得,而且我个人知道要做Build Solution以确保它已经构建......但这已成为一些不记得的新开发人员的问题当他们对SQL文件的更改没有在调试时反映时,这样做并感到困惑...所以我想知道是否有人知道一个简单的修复.
我试图让我的MVC项目的本地化与我们现有的基础设施一起使用来编辑字符串资源.我们将所有资源字符串存储在数据库表中,并具有用于编辑它们的前端Web UI,以及生成.resx文件的导出应用程序.这一切都很好,但是我对使用MVC2和VS2010的新项目有点困难.
我已经问了另一个问题,答案几乎让我在那里,但并不完全.
我现在已根据许多人的建议将资源更改为Resources文件夹(而不是App_GlobalResources).并针对我的.resx文件进行以下设置...
Build Action = Embedded Resource Copy to Output Directory = Do not copy Custom Tool = PublicResXFileCodeGenerator Custom Tool Namespace = Resources File Name = MyApp.resx
我已经更改了我的导出应用程序以使用以下参数运行resgen.exe工具...
string args = string.Format("/publicClass \"{0}\" /str:cs,Resources,{1},\"{2}\"", resourceFile, Path.GetFileNameWithoutExtension(resourceFile), csFilename);
Run Code Online (Sandbox Code Playgroud)
...当我最初将.resx文件添加到我的项目时,生成一个几乎相同的.designer.cs文件.唯一的区别是
生成的.designer.cs文件与我从导出应用程序中运行resgen.exe工具时获得的文件略有不同.
当我第一次将.resx文件添加到我的Resources文件夹时,这是VS2010生成的代码...
public static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Resources.MyApp", typeof(MyApp).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
Run Code Online (Sandbox Code Playgroud)
...运行resgen.exe工具的不同之处在于,它将MyCompany.MyApp的前缀添加到ResourceManager的构造函数中的命名空间
new global::System.Resources.ResourceManager("MyCompany.MyApp.Resources.MyApp", typeof(MyApp).Assembly);
Run Code Online (Sandbox Code Playgroud)
现在,这对我来说似乎是resgen.exe工具中的一个错误,因为我已经告诉它我的资源的命名空间是Resources …