我正在使用Visual Studio 2022
,我正在努力弄清楚如何正确地嵌入和使用资源文件,以便使用GetString()
。
teadates.txt:
DEC=December
MAR=March
基于Micrsoft的documentation,我使用ResGen生成了一个资源二进制文件:
resgen teadates.txt
这产生了一个teadates.resources
文件。我尝试了多种方法来嵌入这个teadates.resources
文件,但似乎都不起作用。
嵌入方式一:
1.右键单击项目〉〉Properties
1.在右窗格中单击Resources
1.我在这里添加现有的teadates.resources
文件
嵌入方式二:
1.在Solution Explorer
中找到teadates.resources
文件
1.在Properties
中,将Build Action
设置为Embedded Resource
代码:
// Fails to compile
// CS0234: The type or namespace name 'teadates' does not exist
// in the namespace 'TeaSpace' (are you missing an assembly reference?)
String tmp1 = TeaSpace.teadates.ResourceManager.GetString("DEC");
// Fails to compile
// CS1061: 'byte[]' does not contain a definition for 'ResourceManager'
// and no accessible extension method 'ResourceManager' accepting a
// first argument of type 'byte[]' could be found (are you missing a
// using directive or an assembly reference?)
String tmp2 = TeaSpace.Properties.Resources.teadates.ResourceManager.GetString("DEC");
// Compiles, fails on runtime when executing rm.GetString("DEC")
// System.Resources.MissingManifestResourceException: 'Could not find any
// resources appropriate for the specified culture or the neutral culture.
// Make sure "teadates.resources" was correctly embedded or linked into
// assembly "TeaCup" at compile time, or that all the satellite assemblies
// required are loadable and fully signed.'
ResourceManager rm = new ResourceManager("teadates", Assembly.GetExecutingAssembly());
String tmp3 = rm.GetString("DEC");
// Compiles, doesn't fail on runtime, but rm.GetString("DEC") returns null
ResourceManager rm = new ResourceManager("TeaSpace.Properties.Resources", Assembly.GetExecutingAssembly());
String tmp4 = rm.GetString("DEC");
tmp1
是完全错误的。它甚至没有找到资源。tmp2
似乎找到了它,但它不能使用ResourceManager,因为它是一个byte[]
。tmp3
编译,因为它似乎没有在编译时检查文件,而只在运行时检查。tmp4
编译,但在运行时没有失败,但返回null。
我试过搜索,包括StackOverflow。我发现了诸如this之类的问题,但所有的答案都掩盖了所有的细节。它们都只有使用ResourceManager
或Properties
的代码,我在上面尝试过,但没有成功。我链接的Microsoft文档在编译之前都很好。它使用命令行,而我尝试使用IDE。
2条答案
按热度按时间ui7jx7zq1#
您可以按照下列步骤嵌入.txt字符串资源文件:
1.将.txt文件添加到项目中。
1.在.txt文件的“属性”窗口中,将“生成操作”设置为“嵌入资源”。
1.编辑.csproj文件,找到.txt文件的
<EmbeddedResource>
元素,然后添加两个子元素:1.使用ResourceManager.getString读取资源值:
ResourceManager构造函数的第一个参数必须与.csproj文件中的
<ManifestResourceName>
匹配。qojgxg4l2#
将字符串从文本文件添加到C# Visual Studio项目的分步说明。
1.您有一个文本文件
teadates.txt
,其内容如下1.在命令行上执行此命令:
resgen teadates.txt teadates.resx
注意,我们将扩展名为
resx
的文件指定为目标文件,以便使用XML resx而不是binary *.resources格式。1.在Visual Studio中,右键单击项目,选择“添加现有项”,然后选择
teadates.resx
文件。1.在解决方案资源管理器中选择新添加的文件并更改这些属性:
将
Custom Tool
设置为ResXFileCodeGenerator
。请注意,teadates.Designer.cs文件现在自动添加到解决方案资源管理器中。
1.现在,您可以通过
teadates.DEC
等代码访问字符串资源或者访问资源管理器: