如何将 add-type 与 -path 和 -language csharpversion3 一起使用?
我一直在 Powershell 中使用 add-type 来动态编译我想要使用的一些 C# 类。效果很好,只是它只是 2.0。
我刚刚发现了 -language csharpversion3
选项,但它不适用于 -path
。我该如何解决这个问题?
[编辑:删除了有关 ReadAllText 的部分 - 我错了。]
I've been using add-type in Powershell to dynamically compile in some C# classes I want to use. Works great except it's 2.0 only.
I just discovered the -language csharpversion3
option, but it does not work with -path
. How can I work around this?
[Edit: removed bit about ReadAllText - I was mistaken.]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
解决方法如下:将文件作为文本读取。
我不妨粘贴其余部分,并以某种方式使这个答案有用。我有一个调试标志,可以让我生成 DLL,这样我就可以更轻松地使用调试器,使用 Reflector 检查它等。
这增加了一些如果 $debugscript 设置为 true,则附加功能:
Here's the workaround: read the file as text.
I might as well paste in the rest and make this answer useful in some way.. I have a debug flag that lets me generate the DLL so I can more easily break in with the debugger, inspect it with Reflector, etc.
This adds some additional functionality if $debugscript is set to true:
我不知道这是否正是您所需要的,但您可以在 powershell 中启用 .NET 4 支持。请记住,默认情况下它使用 .NET 2。为此,您需要在 $PSHome 中添加一个名为 powershell.exe.config 的 XML 和以下内容:
之后,任何针对更大 .net 版本的代码都可以工作,例如看看这个:
该方法使用 Path.Combine 和 .NET4 中定义的 N 个参数。在 .NET2 中,Combine 最多只能处理两个参数。我测试了使用匿名委托的其他示例,这是 C#3 的特征之一:
最后一个示例,如果您尝试下一个代码,它将不起作用,
其他尝试指定语言参数
发生这种情况是因为使用 . net4 ,显然如果你说该语言是版本 3,则自动使用 .net 3 库。为了完成这项工作,您需要添加 System.Core 作为引用的程序集,并忘记语言参数(可能值的枚举没有 Csharpversion4),因此它将使用 4 版本,因为我们之前启用了它。
祝你好运,编码愉快。
I don't know if it exactly what you need, but you can enable .NET 4 support in powershell. Remember that by default it use .NET 2. To do this you need to add in $PSHome an XML with this name powershell.exe.config and this content:
After that any code targeted to a bigger .net version will work, for example look this:
That method use Path.Combine with N arguments that is defined in .NET4. In .NET2 Combine can only handle up to two arguments. I test other example that use anonymous delegates, one of the characteristics of C#3:
One last example if you try the next code it doesn't going to work
other try specifying the language parameter
This is happen because where using a method of .net4 and apparently if you say that the language is version 3 automatically use .net 3 libraries . In order to make this work you need to add System.Core as referenced assembly and forget about the language parameter(the enumeration of possible values doesn't have Csharpversion4) so its going to use the 4 version, because we enable it before.
Good luck, and happy coding.