我尝试找出缺少的Uses。基于Roslyn编译器的响应,我想以编程方式添加缺少的使用。例如:
(91,13): error CS0103: The name "thread" does not exist in the current context.
(76,35): error CS0103: The name "SmoothingMode" does not exist in the current context.
因此,作为一名程序员,我知道缺少的用途是:
using System.Threading;
using System.Drawing.Drawing2D;
但是我该如何以编程方式解决编译器问题?
罗斯林有办法提供帮助吗?
还是可以接管Visual Studio解决方案?
答案 0 :(得分:1)
检查反射后,找到了解决此特定问题的方法。我知道这很不好,但是它现在可以使用,也许有人可以重用它。
基于Roslyn编译器的错误消息:
(18,27): error CS0103: Der Name \"Environment\" ist im aktuellen Kontext nicht vorhanden.
(33,30): error CS0103: Der Name \"DateTime\" ist im aktuellen Kontext nicht vorhanden.
(50,13): error CS0103: Der Name \"Thread\" ist im aktuellen Kontext nicht vorhanden.
我隔离了问题类型:
List<string> errorList = new List<string>();
foreach (string error in compiler.LastError)
if (error.Contains("CS0103:"))
errorList.Add(error.Split(new string[] { "\"" }, StringSplitOptions.None)[1]);
在我的errorList中填充了{“ Environment”,“ DateTime”,“ Thread”}之后,我尝试通过反射在我的程序集中找到这些类型。
我检查了所有172个项目程序集后,发现可以在mscorlib.dll中找到所需的所有内容。 C#专家知道原因。
因此,加载.dll并查找类型:
//LOAD MSCORLIB.DLL ASSEMBLY
var assembly = Assembly.Load("mscorlib.dll");
//GET MSCORLIB.DLL TYPES
Type[] types = assembly.GetTypes();
foreach (string error in errorList)
foreach (Type type in types)
if (type.Name == error)
{
System.Console.WriteLine("using " + type.FullName.Substring(0, type.FullName.Length - (error.Length + 1)) + ";");
break;
}
输出将是:
//MISSING USINGS
using System;
using System;
using System.Threading;
我知道这不适用于复杂的项目,但是对于我的问题来说这已经足够了,也许对其他人也是如此。