小编Jef*_*ght的帖子

MSBuild - 添加要在构建中"清理"的文件

作为我的一个项目的一部分,有"BeforeBuild"任务最终生成一些文件.特别是,它将一个小的静态类(在项目中包含为"不编译")编译成它自己的可执行文件,然后执行它,传入一个外部输入文件,输出一个新生成的类,包含在项目中.

我将它编程为将中间文件放在项目$(OutDir)中,但发现在"Rebuild"(最终是"Clean")中,这些文件没有被拾取.经过一番思考后,我意识到最终生成的类放在$(ProjectDir)中也应该在"Clean"上删除.

对Microsoft.Common.targets的一些调查显示,中间路径(obj\build\assembly.FileListAbsolute.txt)中有一些"主列表",它们被查询要删除的文件.

是否有一些标准方法将我的新文件添加到MSBuild中的此列表中以清除它们,或者这种事情是否适合"BeforeClean"(或"AfterClean")目标覆盖?

msbuild visual-studio

21
推荐指数
1
解决办法
7095
查看次数

使用 Roslyn 解析运行时生成类型的 lambda 表达式

我正在尝试使用 Roslyn 作为解析用户在运行时使用通用格式提供的 lambda 表达式的一种方式:

// The first line is normally static and re-used across callers to save perf
Script baseScript = CSharpScript.Create(string.Empty, scriptOptions);
ScriptState<T> scriptState = await baseScript.ContinueWith<Expression<Func<T, bool>>>(code, scriptOptions).RunAsync()
var parsedExpression = scriptState.ReturnValue;
Run Code Online (Sandbox Code Playgroud)

然后调用者提供code类似P => P.Property > 5. 当我为 T 使用众所周知的类型时,这一切都很好,但我希望允许用户使用更多动态类型,其中每个用户都可以定义自己的一组属性(带有类型)。同步表达式树不支持动态类型(因此 Roslyn 无法编译),我希望允许用户定义他们的属性,并且我会动态生成运行时类型。

我遇到的问题是,在创建运行时类型后,我没有具体的类型可用于Tin .ContinueWith<Expression<Func<T,bool>>>

我使用 full on 反射做类似的事情:

var funcType = typeof(Func<,>).MakeGenericType(runtimeType, typeof(bool));
var expressionType = typeof(Expression<>).MakeGenericType(funcType);

var continueWith = script.GetType()
    .GetMethods()
    .Single(m => m.Name == "ContinueWith" && m.IsGenericMethod && …
Run Code Online (Sandbox Code Playgroud)

c# runtime-compilation roslyn

5
推荐指数
1
解决办法
1095
查看次数

标签 统计

c# ×1

msbuild ×1

roslyn ×1

runtime-compilation ×1

visual-studio ×1