asp.net - 在 ASP.NET 网站项目中使用 64 位引用 - 设计时问题

标签 asp.net .net visual-studio web-site-project aspnet-compiler

背景:我们有老式的 ASP.NET WSP - 网站项目。这是不生成单个 DLL 并使用 dll.refresh 的那个引用映射文件。

问题:使用 VS2017,我们可以毫无问题地使用它,但前提是我们引用的 DLL 不是 x64。见下图

使用 x64 DLL When x64 DLLs are in reference, the reference is NOT listed

使用 x86 DLL When x86 DLLs are in reference, the reference IS listed

因此,在代码文件中我们得到“添加引用”的建议。此类“项目”在很大程度上受 web.config 监管。 .但是我找不到任何有用的开关。我还在工具中打开了“使用 64 位 IIS”,但没有帮助。

我们知道什么

  • 这是一个设计时问题
  • 如果我使用 Aspnet_compiler针对这个具有 x64 依赖项的 WSP,它编译得很好
  • 在 Dev box 上,我可以使用 x86 依赖项并以这种方式工作(并且已经使用了 18 年)。但是在 build box 上我们需要 x64 DLL。 ++ 这个需要解释一下。我们过去只为发布预编译(aspnet_compiler)。但是现在,我们还想在预编译之前构建和验证。未经验证的预编译有几个缺点 - 它不验证 ashx处理程序,它不会拉取依赖项 - 我们必须知道要提供哪些 DLL,然后它才会编译。

在我看来,我需要以某种方式告诉 Visual Studio 使用 64 位工具,但我不知道如何操作。对于带有项目文件的项目,有 <AspNetToolPath>标签。但是如何在这里复制呢?当我使用 MSBUILD 构建时,它会给我 ASPNETCOMPILER : error ASPCONFIG: Could not load file or assembly... incorrect format .所以,工具集有问题,VS 后台编译不工作。与 MSBuild 一样 - 它选择了错误的工具集,或者,它选择了应该使用的任何工具集,但我需要给出要使用的命令。

最佳答案

这是我从微软得到的官方答复

...不幸的是,Visual Studio 对网站项目的 64 位程序集没有很好的支持。通常,这是因为 Visual Studio 和用于 Asp.Net 智能感知的外部进程是 32 位应用程序,因此无法加载这些程序集。但是,由于这是一个网站,所以当页面被请求时,构建将在服务器上进行。因此,一般来说,为了改进 F5 内部循环,您可以关闭 VS 中的构建 - 它仅用于验证目的。为此:

  • 右键单击Project 节点并选择Property Pages

  • Build 选项卡上,将 Before running startup 页面选项更改为 “No build”,然后取消选中 构建网站作为解决方案的一部分

这样做意味着您不会在 IDE 中看到构建错误,而是当您浏览到受影响的页面时它们会出现在浏览器中。而且 intellisense 将不准确,因为 64 位程序集的类型将无法识别。

关于asp.net - 在 ASP.NET 网站项目中使用 64 位引用 - 设计时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57225260/

相关文章:

c# - 如何设置 ASP :Menu with CSS 的样式

asp.net - AutoMapper:将集合中项目的值从一个实例合并到另一个实例

asp.net - MapHubs 不映射中心并在 X 应用程序中返回错误

c# - TaskCanceledException 是否意味着发生了死锁?

c++ - 关于使用#pragma region 在 Visual Studio 中折叠代码块

c++ - 如何在Visual Studio上设置libcurl

javascript - 使用 PostBack 数据爬取页面 javascript Python Scrapy

c# - X 已经包含 EntityFramework 的定义 Y? (简单数据库)

c# - 是否可以确定哪个窗口/用户控件拥有 FrameworkElement?

visual-studio - 如何在 Visual Studio 2010 中恢复文件(从光盘重新加载文件)