.NET Core 如何禁止.resx文件自动生成Designer.cs

作者 : 慕源网 本文共2597个字,预计阅读时间需要7分钟 发布时间: 2021-09-21 共299人阅读

在 Visual Studio 中,如果我们在一个 .NET Core 工程里加入了一个资源文件(.resx),那么你会发现有个对应的 .Designer.cs 文件被自动生成了,每次资源文件的内容有变化,这个设计器文件都会刷新。它本质上就是对应资源文件里的键值对,自动生成访问这些资源的方法。

.NET Core 如何禁止.resx文件自动生成Designer.cs

  生成的代码就像这样:

 

private static global::System.Resources.ResourceManager resourceMan;

 

private static global::System.Globalization.CultureInfo resourceCulture;

 

[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(“Microsoft.Performance”, “CA1811:AvoidUncalledPrivateCode”)]

 

internal DataResource() {

 

}

 

/// <summary>

 

///   Returns the cached ResourceManager instance used by this class.

 

/// </summary>

 

[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]

 

internal static global::System.Resources.ResourceManager ResourceManager {

 

get {

 

if (object.ReferenceEquals(resourceMan, null)) {

 

global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(“Moonglade.Setup.Data.DataResource”, typeof(DataResource).Assembly);

 

resourceMan = temp;

 

}

 

return resourceMan;

 

}

 

}

 

/// <summary>

 

///   Overrides the current thread’s CurrentUICulture property for all

 

///   resource lookups using this strongly typed resource class.

 

/// </summary>

 

[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]

 

internal static global::System.Globalization.CultureInfo Culture {

 

get {

 

return resourceCulture;

 

}

 

set {

 

resourceCulture = value;

 

}

 

}

 

对于资源文件里的每个Key,都会有个方法来读它的值

 

/// <summary>

 

///   Looks up a localized string similar to {&quot;Name&quot;:&quot;Admin&quot;,&quot;Description&quot;:&quot;Moonglade

 

Admin&quot;,&quot;ShortDescription&quot;:&quot;Moonglade Admin&quot;,&quot;AvatarBase64&quot;:&quot;&quot;}.

 

/// </summary>

 

internal static string BlogOwnerSettings {

 

get {

 

return ResourceManager.GetString(“BlogOwnerSettings”, resourceCulture);

 

}

 

}

 

但是,我不希望使用这些代码来读取资源文件。因此我需要禁用自动生成Desinger.cs文件。

 

事实上,这个Designer.cs文件的生产方式是通过CustomTool生成的,就像EF4-6时候通过T4模板生成代码一样,也是一种CustomTool。给资源文件(.resx)生成对应的 .Designer.cs 文件的CustomTool叫做ResXFileCodeGenerator

 

在 Visual Studio 中,你可以在RESX文件的属性窗口里将它设置为 <reset to default> 从而关闭这货

.NET Core 如何禁止.resx文件自动生成Designer.cs

  如果你用的是 Visual Studio Code,可以手工编辑csproj文件,删除这段:

 

<ItemGroup>

 

<Compile Update=”Data\DataResource.Designer.cs”>

 

<DesignTime>True</DesignTime>

 

<AutoGen>True</AutoGen>

 

<DependentUpon>DataResource.resx</DependentUpon>

 

</Compile>

 

</ItemGroup>

 

<ItemGroup>

 

<EmbeddedResource Update=”Data\DataResource.resx”>

 

<Generator>ResXFileCodeGenerator</Generator>

 

<LastGenOutput>DataResource.Designer.cs</LastGenOutput>

 

</EmbeddedResource>

 

</ItemGroup>

 

那么现在,我们如何从资源文件里读取字符串呢?很简单:

 

ResourceManager rm = new ResourceManager(“Moonglade.Setup.Data.DataResource”, Assembly.GetExecutingAssembly());

 

rm.GetString(“Your_Resource_Key”);

 


慕源网 » .NET Core 如何禁止.resx文件自动生成Designer.cs

常见问题FAQ

程序仅供学习研究,请勿用于非法用途,不得违反国家法律,否则后果自负,一切法律责任与本站无关。
请仔细阅读以上条款再购买,拍下即代表同意条款并遵守约定,谢谢大家支持理解!

发表评论

开通VIP 享更多特权,建议使用QQ登录