【问题标题】:What can I do to get the _PublishedWebsites folder include missing DLLs我该怎么做才能让 _PublishedWebsites 文件夹包含缺少的 DLL
【发布时间】:2012-02-06 10:09:43
【问题描述】:

我的 IIS 项目引用了一个安装项目,该项目引用了一个 NServiceBus 项目,该项目具有一个用于 dll 的 nuget 包:

IISProject->SetupProject->NServiceBusProject->NugetPackage.

当我运行我的自动构建 (TFS) 时,NugetPackage.dll 和 NServiceBusProject 被复制到输出文件夹。但它们不会复制到 _PublishedWebsites 文件夹。 (但是我需要的所有其他 dll 都被复制了。)

我不知道如何让这些文件自动复制。

互联网上的常见答案是设置 CopyLocal = True。但是对于 NugetPackage 和 NServiceBusProject 引用来说已经是这样了。

有人知道怎么说“我真的希望你在已发布的网站中包含相关项目吗?

或者还有什么可以看的吗?

【问题讨论】:

  • 网站是直接引用库,还是只引用引用它们的东西?
  • 这些文件是否已部署到 GAC?他们不应该...
  • @Betty - IISProject(我的 WCF“网站”)引用了引用它们的东西。 (参见上面的链)。
  • @KMoraz - 没有向 GAC 部署任何内容。
  • 我多次遇到一个不稳定的 VS 错误,其中它没有获取 CopyLocal 属性。解决方法是简单地删除引用并重新添加它。

标签: visual-studio visual-studio-2010 tfs tfsbuild


【解决方案1】:

由于我刚刚处理过这样的事情,尽管这个问题已经很久了,这就是我最终要做的事情。这并不理想,但确实有效。

在您实际正在构建的项目上设置构建后事件。在构建事件中,您可以使用 $(ProjectDir) 变量引用您的当前位置。在构建项目后,设置一个指向您需要的 dll 的“正常”位置的路径。我认为在您的情况下,这将是 NServiceBus 项目的 bin 目录。

您可以使用$(WebProjectOutputDir) 变量访问“_PublishedWebsites”目录。在本地构建时,它指向与正在构建的项目相同的目录。但是,当使用非标准输出目录(又名来自 TFS)调用 msbuild 时,它会更改为发布目录。

xcopy /Y /S "$(ProjectDir)..\path to needed dll" "$(WebProjectOutputDir)\bin"

您的构建应该在本地和使用此脚本的构建环境中工作。唯一的缺点是它有点脆弱,因为您需要指定丢失的 dll 的确切名称和相对位置。

【讨论】:

  • 这是很棒的发现 $(WebProjectOutputDir)。微软可以/应该在宏中列出它
【解决方案2】:

我打开了 .proj XML 并查看了未复制 DLL 的参考。我确保包含<Private>True</Private> 以供参考。不知何故,即使 UI 显示 Copy Local,它也没有被设置。这可能与根据其他答案删除/读取参考的效果相同。

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多