我可以使用Type.InvokeMember通过反射来调用方法,并且它看起来非常健壮,例如处理param数组参数.但由于某种原因,它不处理可选参数.
是否有更好的内置方法来调用考虑可选参数的方法(可能使用DLR)?
使用ASP.NET 5应用程序(Visual Studio 2015 CTP5)和Microsoft.CodeAnalysis.CSharp.
如果我尝试创建MetadataReference到一个程序集,该程序集是解决方案的一部分,将其作为对CSharpCompilation.Create的引用传递,我得到一个System.ArgumentException,"空路径名称不合法".
// Throws exception
MetadataReference.CreateFromAssembly(typeof(this).Assembly);
// Doesn't throw exception
MetadataReference.CreateFromAssembly(typeof(Object).Assembly);
Run Code Online (Sandbox Code Playgroud)
如果我检查程序集的Location属性,它是空的.我假设这与在ASP.NET 5中编译内存中应用程序的新方法有关,因此程序集不会存储在光盘上.
那么有没有办法将Roslyn的引用传递给没有Location属性的程序集,或者目前是不支持的?
编辑:@JaredPar - @SLaks已经突出显示它失败的确切位置,但这里是信息的完整堆栈跟踪.我之前在System.*程序集中创建了其他几个MetadataReferences,并且没有任何问题.
System.ArgumentException
Empty path name is not legal.
C:\Development\Incubator\net.framework\src\Webfuel.Services.Host\ScriptHelper\ScriptHelper.cs
Line 86:
Line 87: // Compile the code
Line 88: var compilation = CSharpCompilation.Create(
Line 89: assemblyName,
Line 90: options: new CSharpCompilationOptions(outputKind: OutputKind.DynamicallyLinkedLibrary),
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, Win32Native.SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at …Run Code Online (Sandbox Code Playgroud) 我将selenium引用添加到项目中并且正常工作但是当我单击rebuild project时出现此错误:
Run Code Online (Sandbox Code Playgroud)Error 3 The type or namespace name 'Selenium' could not be found (are you缺少using指令或程序集引用?)D:\ PROJEKTI\crawler\WebCrawlerSuite\NCrawler\Net 4.0\NCrawler.WinDemo\SeleniumHtmlDocumentProcessor.cs 6 7 NCrawler.WinDemo
这个警告:
Run Code Online (Sandbox Code Playgroud)Warning 2 The referenced assembly "ThoughtWorks.Selenium.Core" could not解决因为它依赖于"System.Web,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a",它不在当前目标框架".NETFramework,Version = v4.0,Profile = Client"中.请删除不在目标框架中的程序集的引用或考虑重新定位项目.NCrawler.WinDemo
什么可能是错的?
我正在尝试创建一个角度指令,我可以通过单个选项对象或某些属性设置选项.以下是这种代码的示例:
app.directive('testElement', [function () {
return {
restrict: "E",
scope: {
options: "="
},
template: "<p><span>Name: </span>{{ options.name }}</p>",
link: function (scope, element, attrs) {
scope.options = scope.options || {};
if (attrs.name)
scope.options.name = attrs.name;
}
};
}]);
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,因为如果我通过options属性传入名称,则会显示名称值.但是,如果我通过name属性传递名称,即使链接函数确实修改了选项,也不会呈现该值.
http://plnkr.co/edit/IMVZRdAW2a5HvSq2WtgT?p=preview
我觉得我缺少一些关于选项双向数据绑定的基本方法.
c# ×3
.net ×1
angularjs ×1
asp.net ×1
asp.net-core ×1
javascript ×1
reflection ×1
roslyn ×1
selenium ×1