我正在开发一个PowerShell v3模块,它需要使用一些外部.NET程序集中包含的类型.
我希望这个模块能够合理地自包含,以便于部署,我不想依赖于在GAC中加载这些程序集.理想情况下,我想将所需的程序集dll放在模块文件夹中,然后依赖PowerShell在加载模块时自动加载这些程序集.
我知道我可以使用Add-Type命令来强制加载程序集,如下所示:
Add-Type -AssemblyName "Some.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=sometoken"
Run Code Online (Sandbox Code Playgroud)
但我已经阅读了模块清单中所需的程序集属性,我希望这种方法可以消除看似脆弱的Add-Type代码:
# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()
Run Code Online (Sandbox Code Playgroud)
在模块中引用外部组件的最可靠方法是什么?在模块加载时,声明清单中的依赖项会隐式加载程序集吗?如果我利用模块清单列出所需的程序集,我仍然需要编写加载程序集的代码吗?
我真的不是在寻找一个简单的"让它工作"的解决方案,因为我已经使用Add-Type方法实现了这一点......我正在寻找最可靠的方法来做到这一点的指导和建议.
我想要一个C#4字符串常量来表示一个新行和一个标签,如下所示:
internal const string segment = "\r\n\t";
Run Code Online (Sandbox Code Playgroud)
我知道有Environment.Newline,我想我可以像这样使用:
internal const string segment = Environment.NewLine + "\t";
Run Code Online (Sandbox Code Playgroud)
我的问题是构造一个具有新行和制表符的字符串常量的最有效方法是什么?
所以我有一些XML通常看起来像这样
<wd:Data xmlns:wd="urn:com.foo.bar/GetResult">
<wd:Result>
<wd:field1>lorem</wd:field1>
<wd:field2>ipsum</wd:field2>
<wd:field3>dolor</wd:field3>
<wd:field4>sit</wd:field4>
</wd:Result>
</wd:Data>
Run Code Online (Sandbox Code Playgroud)
命名空间以"wd"为前缀
我希望能够获取每个元素<wd:Result>...</wd:Result>并创建一个新的KeyValuePair<string, string>,其中键是元素名称,值是元素的值,如下所示:
{"field1","lorem"} {"field2","ipsum"} {"field3","dolor"} {"field4","sit"}
我的斗争是使用名称空间前缀.我是LINQ的新手,但我总是能够得到这样的代码来处理这样的代码:
var data = XElement.Parse(theXml);
XNamespace ns = "urn:com.foo.bar/GetResults";
var result = data.Elements(ns + "Result")
.Select(x => new KeyValuePair<string, string>(x.Name.LocalName, x.Value))
.ToList();
Run Code Online (Sandbox Code Playgroud)
我该如何查询这些数据以产生所需的结果?
我没有和LINQ结婚,所以社区认为最好的对我来说没问题.