Я работаю над веб-приложением .NET, ориентированным на несколько версий .NET и IIS, которое поставляется с файлом web.config. Мы могли использовать один и тот же файл web.config для большинства настроек, но у нас есть одна строка, которая вызывает у нас проблемы.
Один из наших /configuration/system.web/handler должен указать путь к 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%
, который я могу использовать для указания пути к нужной версии фреймворка без необходимости жестко указывать путь к библиотекам DLL .NET?
Чтобы ответить на ваш конкретный вопрос, нет, нет переменной среды для модуля 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" />
(детали опущены, чтобы подчеркнуть соответствующие атрибуты)