【问题标题】:Is there a way to include an assembly referenced using Unity when using publish website?有没有办法在使用发布网站时包含使用 Unity 引用的程序集?
【发布时间】:2011-09-02 10:57:26
【问题描述】:

我正在使用存储库模式和 Unity 来管理对我的具体存储库对象的依赖关系。这本身不是问题,但是在 VS 和 TFS 构建过程中使用发布网站时我遇到了问题。

我认为问题是由以下事实引起的:尽管在我的应用程序中引用了包含具体存储库对象的项目,但它包含的类从未直接使用过。这是因为我使用 Unity 在运行时使用我的 web.config 中保存的 Unity 配置创建具体对象的实例。

存储库项目在构建时正在编译并包含在输出中,但是当在 TFS 的任一 VS 中使用发布网站时,缺少存储库程序集。因此,当 Web 应用程序部署到 Web 服务器时,无法使用它,因为您会遇到错误:

给定的程序集名称或代码库无效。 (HRESULT 异常:0x80131047)

这是因为 Unity 无法像您预期的那样找到丢失的程序集。

所以我的具体问题是;有没有办法确保在 VS 和 TFS 中发布网站时直接将存储库程序集复制到输出,而不直接使用项目中的具体类之一?

【问题讨论】:

  • 您是否尝试在 TFS 中编辑构建过程?
  • @onof 具体是哪一部分?该项目正在编译,并且组件在构建输出中,它只是没有作为发布的一部分被复制。
  • 哦,我明白了。问题出在 Visual Studio 发布工具中。我猜你需要另一个工具来发布网站
  • @onof 可能就是这种情况。或者我可以创建一个自定义构建过程,在发布后复制缺少的程序集。我只是想知道我是否可以做一些事情来确保它被包含在标准中。
  • 我放弃了使用 Publish Website,因为它对 msbuild 或构建机器等不是特别有用,并转而使用 Web 部署项目,它更有用并且似乎复制我的 Unity 程序集没有问题。

标签: asp.net unity-container publish


【解决方案1】:

因此,经过一番挖掘,我找到了解决问题的方法。此解决方案仅在使用 TFS 构建时解决了问题,但老实说,对于持续集成,我并不担心从 VS 发布。

我的灵感来自Mike Hadlow的回答

What's the best way to get TFS to output each project to its own directory?

基本上解决方案是修改 Web 项目的构建脚本,以便将缺少的程序集复制到发布网站输出文件夹。

这是我所做的:

  1. 我在解决方案资源管理器中右键单击我的 Web 项目,然后单击“卸载项目”。
  2. 然后我右键单击卸载的项目并单击“编辑[项目名称]
  3. 向下滚动到文件底部,我发现以下已注释掉的构建目标:

    目标>

  4. 我修改了这个添加命令来复制缺少的程序集:

    目标>

  5. 现在在 TFS 中构建解决方案时,缺少的程序集包含在已发布网站输出的 bin 文件夹中。

此解决方案可用于将任何其他缺失的内容复制到已发布的网站输出中。由于您要复制的文件可能因每个项目而异,因此以这种方式执行此操作可能是最佳选择。然而,我正在考虑创建一个自定义版本的 Microsoft.WebApplication.targets 来复制缩小的 CSS 和脚本文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    • 2012-11-08
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多