背景:我们有老式的 ASP.NET WSP - 网站项目。这是不生成单个 DLL 并使用 dll.refresh
的那个引用映射文件。
问题:使用 VS2017,我们可以毫无问题地使用它,但前提是我们引用的 DLL 不是 x64。见下图
因此,在代码文件中我们得到“添加引用”的建议。此类“项目”在很大程度上受 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/