从ASP.NET中的标准程序集覆盖资源
我想覆盖ASP.NET项目的System.ComponentModel.DataAnnotations中的字符串.我是否需要制作附属程序集,搞乱自定义构建任务,al.exe等?即使是,我也找不到如何将.resx转换为.resources以将其提供给al.exe.如果不是,在哪里放.resx.以及如何命名?
UPD:说清楚:我想使用自定义资源字符串而不是程序集中的默认资源中的一个.我不想在使用该字符串的每个地方进行更改.毕竟,资源只是为了覆盖它们而存在. 解决方法
Phil Haack有一篇优秀的文章
Localizing ASP.Net MVC Validation,它专门指导你完成你的字符串.本文适用于DataAnnotations,而不是ASP.net MVC.因此,这将有助于您使用DataAnnotattions.
下面我列出了在Visual Studio中添加本地化资源的最简单步骤. >打开“项目属性”对话框. > Resources.resx >当Resources.resx有 要为特定文化添加其他资源文件,您需要这样做. >右键单击您的项目 在构建期间,VS会将.resx文件转换为.resource文件并为您构建包装类.然后,您可以通过名称空间YourAssembly.Properties.Resources进行访问. 有了这个使用声明. using YourAssembly.Properties; 您可以使用以下属性进行装饰: [Required(ErrorMessageResourceType = typeof(Resources),ErrorMessageResourceName = "MyStringName")] 注意:我使用Properties文件夹来保持一致性.要使用App_GlobalResources,请在那里移动.resx文件,并更改using语句以匹配目录名称.像这样: using YourAssembly.App_GlobalResources; 编辑:您可以获得最接近强类型资源名称的方法是执行以下操作: public class ResourceNames { public const string EmailRequired = "EmailRequired"; } 然后,您可以使用这样的属性进行装饰. [Required(ErrorMessageResourceType = typeof(Resources),ErrorMessageResourceName = ResourceNames.EmailRequired)] 要启用自动客户端区域性检测,请将??globalizationsection添加到web.config文件中. <configuration> <system.web> <globalization enableClientBasedCulture="true" culture="auto:en-us" uiCulture="auto:en-us"/> </system.web> <configuration> 在这里,我启用了基于客户的文化,并将文化和养殖设置为“自动”,默认为“en-us”. 创建单独的卫星组件: MSDN Creating Satellite Assemblies文章也会有所帮助. 在过去创建附属程序集时,我发现使用VS构建事件很有用.这些是我要采取的步骤. >在我的解决方案中创建一个单独的类库项目. 示例VS Post-Build脚本: set RESGEN="C:Program FilesMicrosoft SDKsWindowsv6.0Abinresgen.exe" set LINKER="C:Program FilesMicrosoft SDKsWindowsv6.0Abinal.exe" set ASSEMBLY=$(TargetName) set SOURCEDIR=$(ProjectDir) Set OUTDIR=$(TargetDir) REM Build Default Culture Resources (en) %RESGEN% %SOURCEDIR%en%ASSEMBLY%.en.resx %SOURCEDIR%en%ASSEMBLY%.resources REM Embed Default Culture %LINKER% /t:lib /embed:%SOURCEDIR%en%ASSEMBLY%.resources /culture:en /out:%OUTDIR%%ASSEMBLY%.resources.dll REM Embed English Culture IF NOT EXIST %OUTDIR%en MKDIR $%OUTDIR%en %LINKER% /t:lib /embed:%SOURCEDIR%en%ASSEMBLY%.resources /culture:en /out:%OUTDIR%en%ASSEMBLY%.resources.dll REM These are just a byproduct of using the project build event to run the resource build script IF EXIST %OUTDIR%%ASSEMBLY%.dll DEL %OUTDIR%%ASSEMBLY%.dll IF EXIST %OUTDIR%%ASSEMBLY%.pdb DEL %OUTDIR%%ASSEMBLY%.pdb 如果您不想使用ResGen.exe转换.resx文件,可以执行以下操作. using System; using System.Collections; using System.IO; using System.Resources; namespace ResXConverter { public class ResxToResource { public void Convert(string resxPath,string resourcePath) { using (ResXResourceReader resxReader = new ResXResourceReader(resxPath)) using (IResourceWriter resWriter = new ResourceWriter( new FileStream(resourcePath,FileMode.Create,FileAccess.Write))) { foreach (DictionaryEntry entry in resxReader) { resWriter.AddResource(entry.Key.ToString(),entry.Value); } resWriter.Generate(); resWriter.Close(); } } } } 以这种方式进行转换的潜在缺点之一是需要引用System.Windows.Forms.dll.您仍然需要使用Assembly Linker. 编辑:正如wRAR提醒我们,如果您正在为您的程序集签名,请输入密钥must match. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 将ASP.NET网站转换为原生Android / iOS应用程序
- asp.net – 什么是Thread.CurrentPrincipal,它有什么作用?
- 如何在ASP.NET中的多个Web应用程序中维护相同的会话ID
- asp.net – 如何忽略全局asax中图像的日志记录错误
- iis-7 – 在iis7上设置经典的asp站点,站点运行但可以看到服
- 如何在asp.net中从c#运行javascript
- asp.net-mvc-3 – MVC3 – 如何将新创建的子对象链接到其父
- asp.net – MVC 6 – RC1到RC2的更改
- ASP.NET 2中的ISO-8859-1到UTF8
- asp.net-mvc-3 – ajax – 防止双击提交