點選上方藍字關註“汪宇傑部落格”
在 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”);
朋友會在“發現-看一看”看到你“在看”的內容