我正在制作一个工具,并使用Roslyn加载解决方案文件,然后获取所包含项目的编译.
但是出现了一些错误(5000 +)......这些错误很少:
以下代码有两次尝试:
代码:
var workspace = MSBuildWorkspace.Create();
var solution = await workspace.OpenSolutionAsync(@"C:\Projects\MyLib\MyLib.sln");
var sortedProject = solution
.GetProjectDependencyGraph()
.GetTopologicallySortedProjects()
.Select(solution.GetProject);
foreach (var project in sortedProject)
{
//
// #1 - trying to compile right away
//
var compilation1 = await project.GetCompilationAsync();
var diag1 = compilation1.GetDiagnostics();
//
// #2 - compiling adding system references
//
var assemblyPath = Path.GetDirectoryName(typeof(object).Assembly.Location);
var project2 = project.AddMetadataReferences(
new[]
{
MetadataReference.CreateFromFile(
Path.Combine(assemblyPath, "mscorlib.dll")), …Run Code Online (Sandbox Code Playgroud) 是否有工具允许我加载CSS文件,并将滤镜应用于配色方案?就像旋转所有颜色的色调一样,改变全局亮度/暗度,饱和度......就像CSS世界的Photoshop一样!谢谢!
我有以下扩展方法:
public MyCustomAttribute[] GetActionAttributes(
this Controller @this,
string action,
string controller,
string area,
string method)
{
}
Run Code Online (Sandbox Code Playgroud)
在给定区域,控制器,动作名称和方法(GET,POST)的情况下,ASP.NET MVC 3如何找到动作方法?
到目前为止,我什么都没有......没有关于如何做到这一点的线索.
我目前正在寻找控制器动作中的堆栈跟踪,以了解MVC如何发现它.
为什么我需要这些属性
我的属性包含有关给定用户是否可以访问它的信息......但是根据他们是否可以访问它,我不想显示或隐藏某些html字段,链接和其他可以调用该操作的内容.
其他用途
我曾想过使用它来在一个动作上放置一个属性,告诉css类将被渲染的链接调用它...以及其他一些UI提示......然后构建一个HtmlHelper来渲染该链接,看着这些属性.
不重复
是的,有些人会说这可能是这个问题的重复......我没有得到我想要的答案:
如何获取将在给定请求时调用的控制器操作的MethodInfo?
这就是为什么我已经指出了我的问题的情况.
我想获得项目中所有使用类型的列表,例如:
var x = 1;
var y = x.ToString().GetType();
Run Code Online (Sandbox Code Playgroud)
该代码应返回System.Int32,System.String,System.Type.
我所拥有的是慢慢...对于每个文件(语法树),我执行以下操作:
var root = await syntaxTree.GetRootAsync();
var nodes = root.DescendantNodes(n => true);
if (nodes != null)
{
var syntaxNodes = nodes as SyntaxNode[] ?? nodes.ToArray();
// IdentifierNameSyntax:
// - var keyword
// - identifiers of any kind (including type names)
var namedTypes = syntaxNodes
.OfType<IdentifierNameSyntax>()
.Select(id => this.compilation
.GetSemanticModel(id.SyntaxTree)
.GetSymbolInfo(id)
.Symbol)
.OfType<INamedTypeSymbol>()
.ToArray();
// add the found types to the list
this.AddRange(namedTypes);
// ExpressionSyntax: …Run Code Online (Sandbox Code Playgroud) 我有一个UserControl并想在设计时隐藏调整大小句柄,就像TextBoxControl一样,它只有两个句柄(左右两个)...文本框的高度是固定的,除非你说它是多行的.在这种情况下,文本框显示所有九个调整大小句柄.
我想将自定义数据与Type相关联,并在运行时以极快的速度检索该数据.
这只是我的想象,是我完美的世界:
var myInfo = typeof(MyClass).GetMyInformation();
这会非常快......当然这不存在!如果它确实我不会问.呵呵 ;)
这是使用自定义属性的方式:
var myInfo = typeof(MyClass).GetCustomAttribute("MyInformation");
这很慢,因为它需要查找字符串"MyInformation"
这是一种使用Dictionary <Type,MyInformation>的方法:
var myInfo = myInformationDictionary [typeof(MyClass)];
这也很慢,因为它仍然是'typeof(MyClass)'的查找.
我知道字典非常快,但这还不够......它没有调用方法那么快.它甚至不是相同的速度顺序.
我不是说我希望它像方法调用一样快.我想将信息与类型相关联,并尽快访问它.我在问是否有更好的方法,或事件是最好的方式.
有任何想法吗??
谢谢!
编辑:
我之前在所有片段中提到的typeof(MyClass)都是实际可变的...我不知道它是一个特定的MyClass类型,它可以是任何类型:
输入myType = typeFromSomewhere;
也就是说,在这种情况下,MyClass只是说这个类是由我制作的,而且任何其他可能出现这种情况的类型也是由我制作的...所以它读取
typeof(我自己的一个类,我不知道女巫一个是它,但它肯定是我的)
编辑:结论
与字典相关的一些性能结果:
Dic.buckets | Dic.Count | Dic.Key | Ops(x17)/s | Avg.Time | Min.Time | Max.Time
-----------------------------------------------------------------------------
17519 | 12467 | Type | 1051538 | 0.95?s | 0.86?s | 0.42ms
919 | 912 | Type | 814862 | 1.23?s | 1.14?s | 0.46ms
1162687 | 912 …Run Code Online (Sandbox Code Playgroud) x高度是字体度量,以em-height的形式给出,大约是em的0.48,但这取决于字体......
在CSS这两个单位可用,我对前单位感兴趣.还有一个em单元,这样就可以给出ex单元.
下表显示了一些指标,可通过以下站点获得:
http://www.cs.tut.fi/~jkorpela/x-height.html
Arial 0.519
Arial Unicode MS 0.518
Calibri 0.466
Cambria 0.466
Candara 0.463
Code2000 0.444
Comics Sans MS 0.532
Courier 0.425
Courier New 0.423
Garamond 0.384
Georgia 0.481
Helvetica 0.523
Tahoma 0.545
Times New Roman 0.448
Trebuchet MS 0.523
Verdana 0.545
Run Code Online (Sandbox Code Playgroud)
我想知道C#中给定Font对象的x高度.我得到这样的M高度:
TextRenderer.MeasureText("M", font).Height
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何获得x高度.
使用WinAPI是可以接受的.它的方式并不重要......浏览器这样做.他们知道如何计算ex值,我想知道如何获得这个值.请帮忙!!
谢谢.
有助于将Font转换为Typeface的相关问题:
如何将System.Drawing.font转换为System.Windows.Media.Fonts或TypeFace
我试图通过使用razor的@:运算符将一些Html传递给辅助方法,但我无法弄清楚如何做到这一点.编译器声明Razor表达式是一个lambda表达式,但它没有说,这个lambda表达式是什么样的......根本就没有线索!
如果我尝试这样做:
@(MyClass.MyMethod(new
{
Html = @:<div></div>
}
))
Run Code Online (Sandbox Code Playgroud)
错误如下:
Cannot assign lambda expression to anonymous type property
如果我尝试这样做,那么它再次声明它是一个lambda:
@(MyClass.MyMethod(
@:<div></div>
))
Run Code Online (Sandbox Code Playgroud)
如果MyMethod收到一个字符串:ie public string MyMethod(string razorConstructedString)
,那么编译器说:Cannot convert lambda expression to type 'string' because it is not a delegate type.
问题是:我应该声明什么类型的MyMethod,以便它可以接收剃刀构造的参数?
谢谢!
答案是:不,这不是一个错误.不同之处在于ReflectedType.
所以真正的问题是:有没有一种方法可以比较两个PropertyInfo对象,对于同一个属性,但是从不同的类型反映出来,以便它返回true?
此代码通过使用两种不同的方式PropertyInfo为同一属性生成两个对象.它来了,这些属性信息在某种程度上有不同的比较.我已经失去了一些时间试图弄清楚这一点.
我究竟做错了什么?
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
namespace TestReflectionError
{
class Program
{
static void Main(string[] args)
{
Console.BufferWidth = 200;
Console.WindowWidth = 200;
Expression<Func<object>> expr = () => ((ClassA)null).ValueA;
PropertyInfo pi1 = (((expr as LambdaExpression)
.Body as UnaryExpression)
.Operand as MemberExpression)
.Member as PropertyInfo;
PropertyInfo pi2 = typeof(ClassB).GetProperties()
.Where(x => x.Name == "ValueA").Single();
Console.WriteLine("{0}, {1}, {2}, {3}, {4}", …Run Code Online (Sandbox Code Playgroud) 我有一个打算在没有管理员权限的情况下运行的应用程序,但是在这种情况下它失败了。我试图以管理员身份运行我的应用程序,并且该应用程序运行。但这不是我想要的。
我想要的是一种在没有管理员特权的情况下调试应用程序的方法,以便我可以确定导致以普通用户身份运行时导致应用程序失败的原因...以便使我至少知道是什么原因,并有可能将其原因一种无需管理员权限即可运行的方法。
每当我运行Visual Studio 2015时,它将以管理员权限启动。(Administrator)在标题栏中没有办法消除它:
我尝试runas /netonly /user:User devenv.exe无济于事:
如果我尝试在另一个更受限制的帐户下运行VS2015,它说它需要管理特权,并且无法运行:
单击“取消任务广告返回到Visual Studio”不会返回到VS,而是会关闭。
问题是,当我在没有管理员特权的情况下运行应用程序时,它无法打开。没有讯息。没有。但是,当我尝试在Visual Studio中调试它时,它会运行...因为VS本身仅以管理员身份运行。
有没有管理员权限的调试方法吗?