【问题标题】:How can I stop Microsoft.Sharepoint.Sandbox.dll from being copied into my bin folder?如何阻止 Microsoft.Sharepoint.Sandbox.dll 被复制到我的 bin 文件夹中?
【发布时间】:2012-07-11 15:08:58
【问题描述】:

我有一个包含一些 Sharepoint 功能的 utils 类库项目。该项目引用Microsoft.Sharepoint.dll(复制本地设置为false)。我们有许多其他项目引用了我们的 utils dll,每当我们构建它们时,Microsoft.Sharepoint.Sandbox.dll 都会被复制到这些应用程序的 bin 文件夹中。然后在运行任何应用程序时出现以下错误:

Could not load file or assembly 'Microsoft.Sharepoint.Sandbox' or one of its dependencies. An attempt was made to load a program with an incorrect format.

删除 dll 可解决问题。 有没有办法阻止这个 Microsoft.Sharepoint.Sandbox.dll 被复制到 bin 文件夹中? 我不想使用后期构建脚本,因为有很多项目引用了 utils 项目,我们仍然需要在部署时手动删除 dll。

我可以重现如下:

1) 创建一个新的解决方案

2) 添加一个名为utils的类库项目

3) 参考 Microsoft.Sharepoint.dll

4) Class1.cs:

namespace Utils
{
    public class Class1
    {

        public void testMeth()
        {
            Microsoft.SharePoint.DefaultItemOpen c; 
        }
    }
}

5) 向解决方案添加一个新的 Web 项目 (WebApplication1)

6) 引用 Utils 项目并尝试运行 WebApplication1

编辑: Microsoft.Sharepoint.Sandbox 是 64 位 dll,但我需要针对任何 CPU。

有没有办法告诉 VS 停止跨越隐式引用?

【问题讨论】:

  • 其他人可以复制这个吗?
  • 当您添加 Microsoft.Sharepoint.dll 时,它可能会隐含对沙盒的引用。尝试添加对沙盒的显式引用,然后对其执行 Copy Local=False。如何添加参考:sladescross.wordpress.com/2009/10/06/… ----- 这个链接也可能有点帮助:blah.winsmarts.com/…
  • @colinsmith 感谢您的评论和链接。我很确定它确实有对沙盒 dll 的隐式引用,这导致了这种不便。我需要一种方法来告诉 VS 不要太聪明,并且不要复制隐式引用。
  • @colinsmith 我曾尝试将其显式添加,并将本地复制设置为 false,但之前没有运气。我会在早上重试并告诉你
  • @colinsmith 在 utils 项目中显式添加 ref 并将 copy local 设置为 false 不起作用

标签: asp.net sharepoint build project post-build-event


【解决方案1】:

如何将 Microsoft.Sharepoint.Sandbox.dll 程序集添加到 GAC? 根据MSDN

如果您部署/复制包含对 在 GAC 中注册的自定义组件,该组件不会 与应用程序一起部署/复制,而不考虑 Copy Local 环境。如需更多信息,请参阅Project References

更新。如果您以 Any CPU 为目标,您可以编写一个 powershell 或 bat 脚本来枚举所有 bin 文件夹并删除所有 Microsoft.Sharepoint.Sandbox.dll

【讨论】:

  • 这在以 x64 为目标时有效(dll 不再被拉入 bin 文件夹)。不幸的是,由于一些旧的 32 位服务器,我们需要针对任何 CPU。
【解决方案2】:

尝试进入项目属性屏幕。构建选项卡。将“平台目标”更改为 x64

【讨论】:

    【解决方案3】:

    根据this blog post by Louis Liang,解决方法是添加构建后事件并删除DLL:

    cd $(TargetDir)
    del Microsoft.SharePoint.SandBox.dll
    

    【讨论】:

    • 是的,在构建时有效,但不幸的是在发布解决方案时无效
    • @woggles 我明白了...有没有办法以类似的方式自定义发布过程?我知道你不想使用这样的脚本,但这似乎是唯一的选择。
    • 看起来有可能通过一些工作......见stackoverflow.com/questions/1360579/post-publish-events
    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 2012-05-10
    • 2021-01-04
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    相关资源
    最近更新 更多