我正在尋找一種在編譯時擴展/注入代碼的方法,例如模板/宏/片段......假設(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 回答

斯蒂芬大帝
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ù)相同。

蝴蝶刀刀
TA貢獻1801條經(jīng)驗 獲得超8個贊
我能夠通過編寫一個 BeforeBuild msbuild 目標(biāo)來調(diào)用我開發(fā)的外部控制臺應(yīng)用程序來實現(xiàn)我的要求:
將要重寫的源文件復(fù)制到臨時文件夾
重寫臨時文件中的源代碼
向 .csproj 文件添加了條件編譯標(biāo)記,以包含操縱的源文件而不是原始文件
它就像一個魅力:)
我正在為這個任務(wù)開發(fā)一個通用引擎,一旦完成就會將它提交給 github。
- 3 回答
- 0 關(guān)注
- 331 瀏覽
添加回答
舉報
0/150
提交
取消