csproj 文件中 <Use64BitIISExpress /> 元素的用途是啥

Posted

技术标签:

【中文标题】csproj 文件中 <Use64BitIISExpress /> 元素的用途是啥【英文标题】:What's purpose of <Use64BitIISExpress /> element in csproj filecsproj 文件中 <Use64BitIISExpress /> 元素的用途是什么 【发布时间】:2018-01-31 22:09:51 【问题描述】:

当我编辑 Web 应用程序项目时,Visual Studio 2017 (15.3.1) 在 csproj 文件中的 Project/PropertyGroup 下添加 &lt;Use64BitIISExpress /&gt; 元素。 我找不到任何文档,目的是什么,以及它是否会影响某些东西,当呈现时(原样,没有任何属性)。

我能找到的唯一结果是提到了同名的注册表值。

有人知道这个元素的用途吗? 它是在 Visual Studio 2017 的一些最新更新中引入的吗?

【问题讨论】:

我注意到这个元素是在升级到 Visual Studio 2017 更新 3 (15.3) 后在更改 NuGet 包后添加的。 "现在您可以调试您的 64 位网站。如果您不这样做,您可能会收到类似于以下内容的消息:“无法加载文件或程序集或其依赖项之一。试图加载格式不正确的程序。”blogs.msdn.microsoft.com/rob/2013/11/14/… 新标签似乎简化了使用 64 位 IIS 的过程。 @Triynko 我认为您的评论实际上应该扩展为答案。而且我认为the answer from CodeMonkeyKing to this other question 也可能有助于理解为什么虽然这个功能自 VS2013 以来可能存在,但我的设置在 2017 年发生了变化(Mike Harder 谈到对未来版本的改进支持)。 【参考方案1】:

在我对我的项目的“属性”页面进行更改后,我注意到了这个条目,这并不奇怪。在“属性”页面的 Web 部分下,您将看到一个名为“服务器”的部分。在我更改“项目 URL”以使用正确的端口号进行调试后,出现了此条目(不是因为我专门更改了该选项,而是我注意到它出现的时候)。

&lt;Use64BitIISExpress /&gt;

在此部分中,您可以选择“IIS Express”或“外部主机”。在该下拉列表旁边,还有另一个“Bitness”下拉列表。我的当前设置为“默认”,它将项目文件中的条目显示为空元素。将“Bitness”更改为“x64”后,我的项目文件条目更改为:

&lt;Use64BitIISExpress&gt;true&lt;/Use64BitIISExpress&gt;

将我的“位”更改为“x86”会导致:

&lt;Use64BitIISExpress&gt;false&lt;/Use64BitIISExpress&gt;

将“Bitness”返回为“Default”使其再次成为空元素:

&lt;Use64BitIISExpress&gt;&lt;/Use64BitIISExpress&gt;

我知道这并不能解决您关于“文档在哪里?”的问题。我也找不到此属性的任何相关 MSBuild 文档。但是,当我们焦急地等待一些正式的官方文档时,我认为值得注意的是属性来自何处以及它如何根据项目属性中的选定选项起作用。

【讨论】:

它回答了我的问题“目的是什么”——你回答了它所反映的设置——这就是我想要的。 这可能与将 IIS 应用程序池设置为仅 64 位相同。如果您需要在 IISExpress 中进行调试 - 这从 VS2013 开始可用,并用于仅发布的软件64 位 DLL 的 现在我想知道是什么白痴把它变成了项目级别的配置,而不是将它与特定的目标平台(x86/x64)相关联。 那么&lt;Use64BitIISExpress /&gt;和“真”还是“假”一样吗? @MarkSchultheiss 似乎既不是真的也不是假的;它是“默认”,这让我相信它是基于您的托管配置而不是您的解决方案的项目设置。【参考方案2】:

这样做的目的(很明显)是以 64 位模式启动 IIS Express。相当于在 IIS 的应用程序池上只设置 64 位。

如果您的项目依赖于仅在 64 位模式下运行的 DLL,那么此时您需要对其进行设置。从VS2013开始就可以使用了

如果您更喜欢 F5 调试而不是 为纯 64 位应用程序重新附加进程

这个started showing up in the config files since VS2017 由于 Visual Studio 可移植性发生的所有变化。 (VSCode、Visual Studio Mac、Xamarin 等)

【讨论】:

以上是关于csproj 文件中 <Use64BitIISExpress /> 元素的用途是啥的主要内容,如果未能解决你的问题,请参考以下文章

将参数/属性从发布配置文件传递到csproj文件

csproj 文件中的“服务包含”有啥用?

了解 csproj 程序集参考

DotNet Core .csproj 代码文件作为子项

Visual Studio中根据系统区分引用64位32位DLL动态库文件的配置方法

如何在 csproj 模板中使用相对导入?