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

点击上方蓝字关注“汪宇杰博客”

640?wx_fmt=png

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

640?wx_fmt=png

生成的代码就像这样:

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);

    }

}

640?wx_fmt=gif

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

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

640?wx_fmt=gif

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

640?wx_fmt=png

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

640?wx_fmt=gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值