歡迎光臨
每天分享高質量文章

.NET Core 如何禁止.resx檔案自動生成Designer.cs

點選上方藍字關註“汪宇傑部落格”

在 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() {

}

///

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

///

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

    }

}

///

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

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

///

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

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

    get {

        return resourceCulture;

    }

    set {

        resourceCulture = value;

    }

}

對於資源檔案裡的每個Key,都會有個方法來讀它的值

///

///   Looks up a localized string similar to {“Name”:”Admin”,”Description”:”Moonglade

Admin”,”ShortDescription”:”Moonglade Admin”,”AvatarBase64″:””}.

///

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檔案的屬性視窗裡將它設定為 從而關閉這貨

如果你用的是 Visual Studio Code,可以手工編輯csproj檔案,刪除這段:

    True

    True

    DataResource.resx

    ResXFileCodeGenerator

    DataResource.Designer.cs

那麼現在,我們如何從資源檔案裡讀取字串呢?很簡單:

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

rm.GetString(“Your_Resource_Key”);

贊(0)

分享創造快樂