第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

編譯時的 C# 代碼擴展/注入

編譯時的 C# 代碼擴展/注入

C#
人到中年有點甜 2022-01-09 10:53:14
我正在尋找一種在編譯時擴展/注入代碼的方法,例如模板/宏/片段......假設(shè)我在應(yīng)用程序的很多地方都編寫了這段代碼:[JsonObject("MyProperty")]private string MyPropertyJson { get; set; }public object MyProperty { get; set; }MyPropertyJson 屬性僅用于 EF 映射目的,因此我將值保存為 DB 中的 JSON 字符串,但對于類用戶,他們只知道 MyProperty 屬性。我想要做的是,在編譯時,將 MyPropertyJson 擴展為:private string MyPropertyJson {    get    {        return JsonConvert.SerializeObject(MyProperty);    }    set    {        MyProperty = JsonConvert.DeserializeObject(value);    }}我希望僅在輸出二進制文件中完成此操作而不影響源代碼。我知道 Unity、PostSharp、Aspect-Injector 等。但它們并沒有達到我想要的效果,因為通過使用它們,我必須使用一些反射來查找和操作 MyProperty 但我想完全像它被寫的那樣擴展它在同一個類中,可以訪問所有類內(nèi)部。它與代碼片段完全相同,但要在編譯階段進行擴展。
查看完整描述

3 回答

?
Smart貓小萌

TA貢獻1911條經(jīng)驗 獲得超7個贊

無需任何額外費用且在 Visual Studio 中受支持的解決方案是T4 aka Text Templates。但是,它確實需要您安裝您使用的 VS 版本的 VS SDK(例如2015)和 Modeling SDK(例如2015)。

對于我的基類庫,我最終專門為 utils 提供了一個程序集,用于我在生產(chǎn)代碼中編寫的 T4 代碼。我在諸如為 IO 代碼(例如.TT.CS)中的基元推出讀/寫之類的地方使用它。盡管如果您不需要太多/復(fù)雜的編譯時代碼生成,則不必這樣做。


查看完整回答
反對 回復(fù) 2022-01-09
?
斯蒂芬大帝

TA貢獻1827條經(jīng)驗 獲得超8個贊

這是一種得到你想要的東西的方法。


使用隱式運算符


例如,這需要創(chuàng)建您自己的 json 對象類,然后添加這些:


class JsonObject {

    public object obj;


    public static implicit operator string(JsonObject target) { 

        return Json.SerializeObject(target.obj);

    }

}

但這不會真正做到你真正想要的。幾乎與創(chuàng)建新類并添加函數(shù)相同。


查看完整回答
反對 回復(fù) 2022-01-09
?
蝴蝶刀刀

TA貢獻1801條經(jīng)驗 獲得超8個贊

我能夠通過編寫一個 BeforeBuild msbuild 目標(biāo)來調(diào)用我開發(fā)的外部控制臺應(yīng)用程序來實現(xiàn)我的要求:

  1. 將要重寫的源文件復(fù)制到臨時文件夾

  2. 重寫臨時文件中的源代碼

  3. 向 .csproj 文件添加了條件編譯標(biāo)記,以包含操縱的源文件而不是原始文件

它就像一個魅力:)

我正在為這個任務(wù)開發(fā)一個通用引擎,一旦完成就會將它提交給 github。


查看完整回答
反對 回復(fù) 2022-01-09
  • 3 回答
  • 0 關(guān)注
  • 331 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號