为了GetGlobalResourceObject()
在Visual Studio 2008中使用,我必须将.resx文件复制到Visual Studio的App_GlobalResources文件夹中.在预编译应用程序之后,资源文件将被编译到相应的附属程序集中,并按\bin\
文化名称部署在该文件夹下.一切正常.
但是,在预编译应用程序后,我无法添加新的附属程序集.我做的是:
创建了一个卫星组件:
resgen resources.applicationresources.es-ES.resx resources.applicationresources.es-ES.resources al/t:lib/culture:es-ES /embed:resources.applicationresources.es-ES.resources /out:App_GlobalResources.resources.dll
创建文件夹\bin\es-ES\
并在那里部署.dll文件.
遗憾的是,新添加的附属程序集未被识别GetGlobalResourceObject()
,后者退回到默认(英语)资源.资源文件似乎没有任何问题,因为如果我将相同的.resx文件复制到App_GlobalResources
应用程序中,然后编译应用程序,一切正常.
我错过了什么?BTW我的项目类型是网站而不是网络应用程序项目.
我遇到的问题是我需要将C#项目作为单个EXE文件分发,该文件不是安装程序而是真正的程序.它还需要包含当前驻留在子目录中的翻译.
是否可以将其直接嵌入二进制文件中?
我们有一个应用程序,其编译时的结构如下所示:
是否可以在此使用ILMerge?你会怎么做?
resources ilmerge assemblies localization satellite-assembly
是什么决定了卫星装配的目标框架版本?
查看日志文件,我可以看到通过运行ResGen.exe和Al.exe构建附属程序集,但我无法找出决定生成程序集的目标框架的内容.
背景
我正在尝试解决一个问题,当我在构建服务器上构建它时,卫星程序集成为.NET 4.0运行时的目标,但是当我在开发计算机上编译时,目标是.NET 2.0运行时.该解决方案的其余部分针对.NET 2.0运行时,如果针对.NET 4.0运行时,可执行文件将不会加载附属程序集.
我已经尝试使用构建服务器上的msbuild"手动"构建项目,这也导致了针对.NET 2.0运行时的附属程序集.
当我使用自动构建服务器构建时,我只得到错误的目标运行时版本4.0.
我想覆盖一个System.ComponentModel.DataAnnotations
ASP.NET项目的字符串.我是否需要制作附属程序集,搞乱自定义构建任务al.exe
等?即使是,我也找不到如何转换.resx
为.resources
将其提供给al.exe
.如果没有,在哪里放.resx.
以及如何命名它?
UPD:说清楚:我想使用自定义资源字符串而不是程序集中的默认资源中的一个.我不想在使用该字符串的每个地方进行更改.毕竟,资源只是为了覆盖它们而存在.
我正在开发一个C#.NET应用程序,我正在使用资源文件进行本地化.我有文化特定的资源文件,如:
构建之后,在应用程序根文件夹中有文件夹fr-FR
,ja-JP
等等.
例如,是否可以将所有本地化资源文件和文件夹移动到同一文件夹中Languages
?
更新1:
我用下面的代码解决了这个问题.似乎当我将应用程序复制到另一个地方时,它无法加载资源.正如我所看到的,application.config文件也需要存在.如果我将app.config作为嵌入资源,它不起作用.
有没有办法,如何在没有同一目录所需的.config文件的情况下做到这一点?
谢谢
是否有可能告诉MSBuild不要为某个组件或所有组件复制卫星组件?
我有一个nuget包,其中包含资源程序集,但我不想将它们包含在我的输出中.
谢谢.
我正在转换一个项目使用卫星装配.我创建了一个新的类库(名为"Resources").所有默认资源都位于根级别*.resx
.然后每个文化都有一个文件夹.
"en /"with *.en.resx
en-GB/with *.en-GB.resx
我将.resx文件更改Access Modifier
为"公共"并更改了这些设置.
BuildAction: EmbeddedResource
CopyToOutputDirectory: CopyAlways
Run Code Online (Sandbox Code Playgroud)
我确保.resx
设计人员*.Designer.cs
使用"Resources"命名空间.
我将类库添加到ASP.NET MVC应用程序中,并global.asax.cs
根据需要设置文化.
System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
Run Code Online (Sandbox Code Playgroud)
我尝试将al.exe
和Resgen.exe
命令添加到Resources类库中的post-build事件.
"C:\ Program Files\Microsoft SDKs\Windows\v7.1\Bin\Resgen.exe"en-GB/MyResourceFile.en-GB.resx"C:\ Program Files\Microsoft SDKs\Windows\v7.1\Bin\al.exe"/ t:lib /embed:en-GB/MyResourceFile.en-GB.resources/culture:en-gb /out:Resources.resources.dll
查看MVC apps bin/
文件夹,每种语言都有3个文件夹:
MyResources.en-GB.Designer.cs,MyResources.en-GB.resx,Resources.resources.dll
根级别只有Resources.dll
,Resources.resources.dll
但默认语言工作正常.第二个*.resources.dll
是由于后期构建事件.
当我更改CurrentUICulture时,它不会更改UI语言.在将资源移出App_GlobalResources/
外部组件之前,它工作正常(Razor示例).
@Resources.MyResources.StringIdentifier
Run Code Online (Sandbox Code Playgroud)
.dlls
使用.NET Reflector 查看资源,这些是不同之处.
Satellite Resources: (Project: Resources)
Resources.en_GB.MyResources.en-GB.resources
App_GlobalResources: (Project MVCApp)
Namespace.MVCApp.App_GlobalResources.MyResources.en-GB.resources
Run Code Online (Sandbox Code Playgroud)
编辑:
在设置了CurrentCulture和UICulture之后global.asax.cs
,我测试 …
下面的程序应该从卫星资源文件中获取资源字符串。使用 VS2015 使用目标框架 = NET Framework 4.5.2' 进行编译时,它可以正常工作。但是,设置 target framework='NET Framework 3.5' 使其无法找到卫星资源文件并回退到默认资源。
我查看了 .exe 和卫星 .dll 文件,发现它们被编译为不同的 .net 版本(尽管生成它们的是同一个编译):
Main exe got: .Net Framework v3.5
Satellite resource dll got: .Net Framework v4.0
Run Code Online (Sandbox Code Playgroud)
它接缝就像卫星 dll 获取错误的 .Net 版本。有没有人遇到过这种情况,有解决办法吗?(除了将项目升级到最新的 .Net 版本)
class Program
{
static void Main(string[] args)
{
CultureInfo newCultureInfo = new System.Globalization.CultureInfo("da-DK");
Thread.CurrentThread.CurrentUICulture = newCultureInfo;
Console.WriteLine("Resource test");
ResourceManager rm = new ResourceManager("ResourceTest.Resources.MyResources", Assembly.GetExecutingAssembly());
Console.WriteLine(rm.GetString("hello"));
Console.WriteLine("Press any key to exit");
Console.ReadKey();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:接缝就像我对我的开发环境进行了错误的更新。重新安装整台计算机有帮助,但简单地重新安装 .Net 和 Visual Studio 并没有!(我想知道注册表数据库中是否有一些东西不会通过简单的重新安装来重置)
localization ×4
.net ×3
asp.net ×3
c# ×3
resources ×3
msbuild ×2
asp.net-mvc ×1
assemblies ×1
embed ×1
ilmerge ×1
tfsbuild ×1