【问题标题】:PowerShell + SharePoint cannot seem to add an assemblyPowerShell + SharePoint 似乎无法添加程序集
【发布时间】:2011-05-23 03:00:16
【问题描述】:

我在“使用”我创建的自定义字段时遇到问题。在 power shell 中,程序集正在使用 LoadFrom 函数加载到脚本中,并且在加载程序集时不会引发错误,但它的行为就像没有加载程序集一样。

尝试枚举字段时,我的一个自定义字段会出现“未正确安装”错误。当尝试通过 myListItem["myCustomField"] 访问自定义字段时,我收到了 CannotIndex 错误。

我在使用 C# 在 Visual Studio 中编写确切的代码时遇到了这些相同的错误,但是,一旦我添加对我的程序集的引用,它就可以在那里正常工作。(这里的重要部分,这应该表明我在 power shell 中没有做错任何事情,即通过显示名称而不是内部名称等访问字段。

如果我将我的程序集添加到 GAC,则在 power shell 中一切正常,但目前这不是我的选择。我需要能够从 dll 加载程序集。

有什么线索吗?

【问题讨论】:

    标签: c# .net sharepoint powershell


    【解决方案1】:

    通过 LoadFrom 加载的程序集的行为方式与从 GAC 加载的程序集不同。这不仅仅是信任问题。如果您有耐心,请从这里开始:

    http://blogs.msdn.com/b/suzcook/archive/2003/05/29/choosing-a-binding-context.aspx

    在 Visual Studio 中添加引用仅用于编译过程,而不是运行时加载。在运行时,依赖程序集(引用)与进程可执行文件(如果它们不是 GAC 引用)放置在同一目录中。在 powershell 情况下,您的依赖程序集与进程可执行文件(powershell. EXE文件)。这就是探测它们的依赖关系失败的原因。如果您将它们复制到 $PSHOME 中,它可能会起作用,但这不是一个可行的解决方案,因为这是 system32 下的特权位置。

    -奥辛

    【讨论】:

    • 感谢您的洞察力。将其复制到 $PSHOME 确实有效,但您说得对,我们无法做到这一点。不过,这是一个很好的线索。
    • 好吧,它不能解决我们的问题,因为我们不能将程序集放在 $PSHOME 中。我是否应该取消我的程序集必须位于 GAC 中或与 powershell.exe 位于同一文件夹中才能正确引用它?
    • @ferr - 是的,这就是暗示。您可以尝试的最后一件事是首先使用 add-type (即反向顺序)手动加载依赖项,最后加载主文件并在接受之前对其进行测试。您在这里处理的是 CLR 的基本安全行为,而不是 powershell/sharepoint 故障。
    • 我刚看到这篇文章,人们遇到了类似的问题。他们似乎没有找到这里尚未解决的解决方案:leeholmes.com/blog/2006/10/27/load-a-custom-dll-from-powershell
    • @ferr - 是的。 Lee 是 Microsoft 的 powershell 核心开发人员之一。
    【解决方案2】:

    PowerShell 2:

    Add-Type -Path C:\Path\To\Assembly.dll
    

    PowerShell 1:

    [Reflection.Assembly]::LoadFrom('C:\Path\To\Assembly.dll')
    

    【讨论】:

    • 使用PS2版本..需要引号吗?使用这个,同样的结果: Add-Type -Path 'C:\path\name\here\fields.dll'
    • 我相信引号是可选的,但它们不会受到伤害。
    • 除非路径中有空格,否则不需要引号。
    • 我对这两种方法都有同样的问题。
    • 由于在 C# 中在 VS 中添加引用时这一切都适用于我,我想知道它使用什么方法来添加程序集.. 以及是否有我可以在 PS 中使用的等效过程..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2021-09-21
    • 2016-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多