【问题标题】:Visual Studio When publish some class is missing from DLLVisual Studio 发布时 DLL 中缺少某些类
【发布时间】:2016-06-30 15:08:55
【问题描述】:

我有一个包含网站的解决方案,其中包含大量文件。

最近发生了必须将一个新网页添加到该站点的情况。使用新文件构建解决方案时,一切正常。 尝试使用 Web 发布向导时,进程中断。

基本上是这样的:

  • 新页面(例如 myPage)添加到 webproject
  • 在visual studio本地构建,一切正常。最终程序集包含代码库中的所有类。
  • 将网站发布到文件系统(右键单击并从 CSProject 发布),预编译会引发错误,提示缺少“myPage”类。

我在三个常用位置检查了 Dll 版本(例如 myWebSite.dll):

  • \bin -> 编译代码完整,包括“MyPage”类
  • \obj\Debug\Package\PackageTmp\bin -> 编译代码不完整,缺少新类,包括“MyPage”类
  • \obj\Debug\AspnetCompileMerge\Source\bin -> 编译代码不完整,缺少新类,包括“MyPage”类

【问题讨论】:

  • obj 文件夹确实不包含最终的二进制代码,它本质上是一个临时文件夹。发布不使用来自obj 的任何内容。你是如何发布网站的?您使用了哪些设置?您是否选择了错误的文件夹?您使用的是什么版本的 Visual Studio?
  • 感谢您的回复。 VS 2010 和 2012 版本,完全没有区别。网站通过本地发布到文件系统发布(右键单击项目名称并发布)。使用的设置是:本地文件夹(c:\publish),删除之前发布的所有文件,预编译应用程序
  • 您是否清理并重建了解决方案?听起来可能很愚蠢,但有时 VS 会忽略 DLL 已被修改并且不会覆盖它。
  • @panagiotis:我同意你的观点,obj 不包含最终的二进制代码。尽管如此,它仍被用作编译和构建二进制文件的临时存储。然后应该将这些放在一起并“复制”到发布文件夹。事实上,如果我不标记“预编译”,我的发布文件夹中的 dll 版本正是 obj 中的那个
  • 不要打你的头,不要寻找错误,至少提供 一些 信息,忘记obj。如果bin 中的 dll 像你说的那样没问题,那你为什么还要打扰obj 呢?如果类在 dll 中,您的站点将可以工作。发布 Visual Studio 版本和您使用的设置。同时发布完整错误

标签: c# web-publishing


【解决方案1】:

解决方案是这样设计的,带有循环引用:

MySolution
    Project A
    Project B
    Project C
    ...

项目 A 引用项目 B,该项目 B 引用项目 A 的程序集输出。

在本地构建时,一切正常,因为从 A 生成的程序集是 ProjectA.dll 并已重新生成。看起来当在 Visual Studio 中使用“发布”(Web 发布,而不是 TFS 构建和发布功能)时,它会混淆引用,并且生成的 Dll 缺少某些部分。

这个缺陷是因为引用的循环程序集不是最新的,而是过时的。

【讨论】:

    猜你喜欢
    • 2012-09-27
    • 1970-01-01
    • 2018-10-23
    • 2015-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多