![.NET Framework 位置的环境变量](https://linux22.com/image/622804/.NET%20Framework%20%E4%BD%8D%E7%BD%AE%E7%9A%84%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F.png)
我开发了一个 .NET Web 应用程序,该应用程序面向多个 .NET 和 IIS 版本,并附带一个 web.config 文件。我们能够对大多数设置使用相同的 web.config 文件,但有一行代码给我们带来了麻烦。
我们的 /configuration/system.web/handlers 之一需要指定 aspnet_isapi.dll 的路径。
<remove name="ASP.Net-ISAPI-Wildcard" />
<add name="ASP.Net-ISAPI-Wildcard" path="*" verb="*" type="" modules="IsapiModule"
scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll"
resourceType="Unspecified" requireAccess="None" allowPathInfo="false"
preCondition="runtimeVersionv2.0" responseBufferLimit="4194304" />
如您所见,该路径直接指向框架版本,这会导致问题,因为有些人是 32 位用户(使用Microsoft.Net\Framework
),而其他人是 64 位用户(who use Microsoft.Net\Framework64
)。
是否存在一个环境变量,例如%windir%
,我可以使用它来指定正确框架版本的路径,而不必对 .NET DLL 的路径进行硬编码?
答案1
回答您的具体问题,不,asp.net isapi 模块没有环境变量。
使用托管处理程序,这不是问题,您只需指定所需程序集的类型名称和签名,IIS 就会从全局程序集缓存中加载它
但是对于 ISAPI 模块,您仍然需要提供路径,但您可以做的是定义 2 个处理程序并根据托管应用程序为它们提供不同的先决条件:
<remove name="ASP.Net-ISAPI-Wildcard" />
<add name="ASP.Net-ISAPI-Wildcard-64"
scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll"
preCondition="runtimeVersionv2.0,bitness64" />
<add name="ASP.Net-ISAPI-Wildcard-32"
scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll"
preCondition="runtimeVersionv2.0,bitness32" />
(省略细节以强调相关属性)