问题标签 [resgen]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 在项目中编译 resx 文件或者只使用 resgen 而不编译 resx
我在我的项目中使用了 2 个 resx 文件,一个用于 en-Us,另一个用于 de-DE(本地化)。
我使用 resgen 将这些 resx 文件编译为资源文件。
谁能帮我解决以下两个问题:
如果我需要在项目中为 fr-FR 添加更多 resx 文件,我是否需要在项目中为 fr-Fr 添加新的 resx 文件后再次编译项目,或者我可以只创建 resx 文件并生成 .使用 resgen 工具从 resx 获取资源文件而不编译 Visula Studio 项目?
使用 resgen 从 resx 生成的 .resource 文件是否可以嵌入到 exe 中,或者它是否会与使用资源文件的 exe 一起作为独立编译的二进制文件保留?
resgen - Resgen 命令在项目的后期构建事件中不起作用
此命令在项目的后期构建事件中不起作用:
resgen "$(ProjectDir)SpectrumLite_en-US.txt" "$(ProjectDir)"
输出窗口中的错误消息是:
'resgen' 不是内部或外部命令、可运行程序或批处理文件。
该命令在 Visual Studio 命令提示符下成功运行,但在 cmd 和构建事件后都没有。
tfsbuild - 从 TFS2010 迁移到 TFS2012 时 System.Drawing V4 出现 FileNotFoundException。异常代码 0xE0434F4D
我在 VS2005 .Net 2 中开发了一个大型解决方案。我们从 TFS2010 迁移到 TFS2012(将框架保持为 .Net v2)。在 IDE 中一切正常,构建和安装,但是当程序执行时,得到以下问题签名:
TFS2010 构建服务器是 Windows XP SP3 x86。
TFS2012 构建服务器是 Windows Server 2008 R2 x64。
我已将框架迁移到 .Net 4 并且一切正常,但不幸的是,有些客户需要 .Net 2。
使用 WinDbg 给了我以下信息:
/li>
据我所见, System.RuntimeTypeHandle.GetTypeByName 的参数 1 即字符串为 0,因此 FileNotFound 异常,但它没有告诉我文件名。
- 使用 FusionLog 给了我以下信息:
它成功加载 System.Drawing v2,但随后也尝试加载失败的 v4(我检查过没有项目引用任何 .Net v4 程序集)。
以下是 Procmon 的摘录:
如您所见,它尝试加载 myProgram.resources.dll 并失败,然后尝试加载 Framework v4 文件,这让我查看了资源文件。
mscorlib.resources.dll 由 .Net 语言包和 Silverlight 安装。尝试安装 Silverlight,因为我们的 TFS2010 构建服务器有这个,但没有用。
[本文] :.Net 2.0、VS2010 和 Windows 8 上的“无法加载文件或程序集 System.Drawing 或其依赖项之一”错误表示 System.Drawing 错误是由于 VS 中的资源文件错误造成的。我已经尝试了建议的解决方案:
Edit the top line of the Image stream: AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w TO AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w None of the resource files in my solution has the erroneous top line in the image stream "j00LjAuMC4w"
还检查了所有 .resx 文件的 4.0.0.0 版本,但它们都是 2.0.0.0
- 这是崩溃迷你转储:
转储摘要
迷你崩溃转储给了我异常代码 0xE0434F4D。
- 试过 [这个想法] [程序名称].exe 已停止以管理员身份运行 myProgram 但没有帮助。
[这个博客] http://blog.toxa.de/archives/38(也处理.Net 2)给了我从SplashScreen中删除图标的想法。这会影响引发的错误。而不是如上所述得到 1 个错误,而是使用 continue 选项得到 3 个错误。
- 从构建日志:
我看到使用了 Framework v4 的 MSBuild
尝试在每个项目文件中添加 Set ToolsVersion = 2.0 和 TargetFrameworkVersion = v2.0,在 TFSBuild.proj 中添加 ToolsVersion="2.0"。
从命令行运行 Framework v2 MSBuild:
- 未识别任何开关 (/m:1 /nr:False "@F:\Builds\59\Platform\myProgram_BugFixing_CI\BuildType\TfsBuild.rsp")。
- 删除这些后,TFSBuild.proj 的第 7 行构建失败,因为无法识别 SolutionRoot。
- 如果我对此进行硬编码,则在 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\TeamBuild\ Microsoft.TeamFoundation.Build.targets 第 359 行也指的是 SolutionRoot 上的构建失败。它说命名空间中有一个无效的子元素 _SolutionRoot。
这向我表明 MSBuild v4 是正确的版本,TFS2010 构建服务器也必须使用它。
- TFS Build.log 揭示了构建中使用的不同 ResGen 版本:
我用 TFS2010 构建服务器 exe 替换了 TFS2012 构建服务器 ResGen 并成功运行了构建,这没有任何区别。
[本帖] MSBuild 找不到 resgen.exe提示设置
到与设置 ProductionVersion 相同的值
这是v8,但这不起作用。
- 在 myProgram.exe(两个版本)上使用 IlSpy 来反编译代码显示两个树结构,其中反编译的 .cs 文件相同,但二进制 .resource 文件不同(大小和内容)。
特别是二进制编辑显示 mainform.resources 的尾部是行(当然还有其他差异):
在旧的 TFS2010 exe 中,与
在新的 TFS2012 exe 中。这意味着新版本正在使用 .Net 4 二进制序列化;旧的正在使用 .Net 2 二进制序列化。
ResGen 的快速反编译表明它是一个非常简单的程序:
- 解析参数
- 从 .resx 文件中读取资源
- 使用二进制资源编写器写入输出文件
我怀疑这两个版本非常相似,因为实际上不需要更改(实际上都标记为 .net2/AnyCPU)。
更有趣的是,使用的二进制序列化程序来自 mscorlib,因此新构建必须使用 .Net 4 mscorlib(但构建日志显示它是 v2
) 尽管 ResGen 实际上是一个 .Net 2 二进制文件 - 这可以解释为什么覆盖上面第 7 点中尝试的 ResGen.exe 版本没有效果。
asp.net - 如何读取“resgen.exe”生成的“.resources”文件?
通过使用 resgen.exe,我可以从 txt 文件生成“资源”文件。我可以在 WPF 中使用“资源”文件,但是我不确定如何填充“cshtml”文件中的值。任何帮助,将不胜感激。
c# - C# 使用命令提示符执行 resgen.exe
我正在创建一个控制台应用程序,我将使用它来控制 C# 应用程序的不同语言的国际化。
我唯一的问题是我需要使用命令resgen InputFile OutputFile通过 cmd 创建一个 .resource 文件。要执行此命令,我有自己的命令,在其中生成需要执行命令的指定文件(strings-ca-ES.txt、strings.ca-ES.xaml、...)。创建这些文件后,程序启动一个 System.Diagnostics.Process,文件名为“cmd.exe”,参数为“resgen strings.ca-ES.txt”。之后,使用命令“resgen strings.ca-ES.txt strings.ca-ES.resources”执行另一个进程。第一个和第二个都没有执行,当我在同一个提示窗口中编写相同的命令时(它还没有关闭)它给了我下一条消息:
这意味着未找到命令resgen但我在环境变量中有指向它的路径。
任何帮助都会受到好评。
谢谢!
c# - 在没有 Resgen 的情况下生成 Satellite 程序集
我们有一个过程,我们在其中生成带有 resx 文件的附属程序集。该过程依赖于系统上存在的 Resgen。还有另一种方法吗?这样它就可以工作,但由于这种依赖关系,它看起来并不优雅。
我们想让它看起来优雅和不那么依赖的原因是我们想在服务器上运行这个进程。
msbuild - MSBuild GenerateResource 任务生成命名空间不完整的资源文件名,导致我们的应用在运行时崩溃
我们使用 Xamarin Forms 构建移动应用程序,而 macOS 构建 iOS 应用程序。我们今天遇到了一个让我摸不着头脑的问题。
带有嵌入式资源文件的正常构建如下所示:
所以那里没有惊喜;.resx 文件被编译为具有程序集命名空间 + 文件夹名称 + resx 文件名的二进制 .resources 文件。
但是,我们对构建服务器上的目录结构进行了更改,这改变了 CoreResGen 的输出:
请注意“资源”文件夹是如何从 .resources 文件名中删除的。当编译到应用程序中时,这会导致我们的应用程序在运行时崩溃,因为资源文件命名空间现在不同了。
我们使用自托管的 Azure 代理构建我们的应用程序。所有应用程序都是从同一个存储库构建的,作为简化构建服务器的努力的一部分,我们实施了一个管道任务,为所有构建使用一个公共存储库文件夹。Azure 代理通常会从 _work/build-id/s 构建,我们的管道任务会将这个目录符号链接到 _work/g/repo-id,以便多个构建可以共享同一个存储库。
当我们使用 _work/build-id/s 中的 repo 构建时,一切都很好。当我们使用符号链接的 repo 构建时,会发生文件命名空间错误。
据我们所知,这发生在 macOS 上,但不在 Windows 上。
我们有一个可能在 macOS 上发生的相关问题,但在 Windows 上没有。以下输出来自使用单声道的 macOS:
Path.GetDirectoryName 在CreateCSharpManifestResourceName中用于从 Resources\TextRes.resx 创建输出文件名,但似乎有将 \ 替换为 / 的守卫,我不明白为什么符号链接源文件夹会触发它。
有没有人经历过这个?我错过了一些明显的东西吗?
visual-studio-2017-build-tools - 以正确的编码生成 .resx 资源文件
我知道我可以在“属性”工具窗口中更改资源文件的编码(例如更改为 Unicode/utf-16),但这只会为现有文件设置它。
我可以让 Visual Studio 的资源生成器(resgen.exe)首先输出特定编码的文件,这样我就不需要在每次添加、删除或更新文件中的条目时更改编码类型使用资源编辑器,还是我需要在项目属性中添加预构建事件命令?
c# - .resource 文件是否有可视化编辑器
我已经用 txt 文件中的 resgen.exe 生成了二进制资源 (.resources) 文件。你知道是否有任何已经生成的资源文件的可视化编辑器。我的情况是软件已交付给客户,他想更新文件中的值。