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

01/20 23:42
阅读数 10



在 Visual Studio 中,如果我们在一个 .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> 从而关闭这货

如果你用的是 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");





原文地址:

https://

 

Tips

更多精彩文章, 欢迎访问本人博客https://enjoy233.cnblogs.com 或 知乎搜索「Bravo Yeung」.


欢迎转发到朋友圈, 公众号转载请后台联系本人申请授权~

回复m可查看本号文章列表噢, 然后可以点击链接阅读文章~

也可在收到的列表中找到文章相应编号后回后台回复编号直达.


推荐阅读

中英文电子书下载网站大搜罗

英语语法工具 | 那些可以纠正英语文章中语法的神器们

开发者见闻 | ASP.NET Core开发者路线图



你点的每个"在看"

我都认真当成了喜欢👇

本文分享自微信公众号 - 大白技术控(DaBaiTech)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部