我正在寻找一种在编译时扩展/注入代码的方法,例如模板/宏/片段......假设我在应用程序的很多地方都编写了这段代码:[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 但我想完全像它被写的那样扩展它在同一个类中,可以访问所有类内部。它与代码片段完全相同,但要在编译阶段进行扩展。
3 回答

斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
这是一种得到你想要的东西的方法。
使用隐式运算符
例如,这需要创建您自己的 json 对象类,然后添加这些:
class JsonObject {
public object obj;
public static implicit operator string(JsonObject target) {
return Json.SerializeObject(target.obj);
}
}
但这不会真正做到你真正想要的。几乎与创建新类并添加函数相同。

蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
我能够通过编写一个 BeforeBuild msbuild 目标来调用我开发的外部控制台应用程序来实现我的要求:
将要重写的源文件复制到临时文件夹
重写临时文件中的源代码
向 .csproj 文件添加了条件编译标记,以包含操纵的源文件而不是原始文件
它就像一个魅力:)
我正在为这个任务开发一个通用引擎,一旦完成就会将它提交给 github。
- 3 回答
- 0 关注
- 288 浏览
添加回答
举报
0/150
提交
取消