.NET Framework 位置的环境变量

.NET Framework 位置的环境变量

我开发了一个 .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" />

(省略细节以强调相关属性)

相关内容