在 ASP.NET 网站项目中使用 64 位引用 - 设计时问题
Using 64-bit references in ASP.NET Web Site Project - design time issues
背景: 我们有老式的 ASP.NET WSP - 网站项目。这是一个不生成单个 DLL 并使用 dll.refresh
文件进行引用映射的文件。
问题: 使用 VS2017,我们可以毫无问题地使用它,但前提是我们引用的 DLL 不是 x64。见下图
使用 x64 DLL
使用 x86 DLL
因此,在代码文件中我们得到了 "add reference" 的建议。这种类型的 "project" 主要由 web.config
调节。但是我找不到任何有用的开关。我也在工具中打开了 "Use 64-bit IIS" 但没有帮助。
我们知道什么
- 这是一个设计时问题
- 如果我对这个具有 x64 依赖项的 WSP 使用
Aspnet_compiler
,它编译得很好
- 在 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 节点并选择 属性 Pages
在 Build 选项卡上将 Before 运行 startup 页面选项更改为 "No build",并取消选中 构建网站 作为解决方案的一部分
这样做意味着 您不会在 IDE 中看到构建错误,而是 当您浏览到受影响的文件时,它们会出现在浏览器中页。 intellisense 将不准确 因为 64 位程序集的类型将无法识别。
背景: 我们有老式的 ASP.NET WSP - 网站项目。这是一个不生成单个 DLL 并使用 dll.refresh
文件进行引用映射的文件。
问题: 使用 VS2017,我们可以毫无问题地使用它,但前提是我们引用的 DLL 不是 x64。见下图
使用 x64 DLL
使用 x86 DLL
因此,在代码文件中我们得到了 "add reference" 的建议。这种类型的 "project" 主要由 web.config
调节。但是我找不到任何有用的开关。我也在工具中打开了 "Use 64-bit IIS" 但没有帮助。
我们知道什么
- 这是一个设计时问题
- 如果我对这个具有 x64 依赖项的 WSP 使用
Aspnet_compiler
,它编译得很好 - 在 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 节点并选择 属性 Pages
在 Build 选项卡上将 Before 运行 startup 页面选项更改为 "No build",并取消选中 构建网站 作为解决方案的一部分
这样做意味着 您不会在 IDE 中看到构建错误,而是 当您浏览到受影响的文件时,它们会出现在浏览器中页。 intellisense 将不准确 因为 64 位程序集的类型将无法识别。