Criando diretórios virtuais no IIS Express


124

Existe alguma maneira de criar um diretório virtual no IIS Express? Eu sei que a Cassini não pode fazer isso e seria bom poder fazer isso sem usar uma versão completa do IIS.

Compreendi até agora que posso navegar para o meu aplicativo localmente no IIS Express assim:

http: // localhost: 1132 /

O que eu gostaria de fazer é criar um diretório virtual chamado "OffSiteStuff" e apontá-lo para algum local na minha unidade C, como "c: \ offsitestuff" e, em seguida, procurar itens nessa pasta como este:

http: // localhost: 1132 / OffSiteStuff / UserUploadedImage.jpg

Eu sei que eu poderia fazer isso com uma pasta no meu site e ainda usar o IIS Express, ou, na verdade, o velho Cassini, mas essa pasta armazenará imagens enviadas por usuários e eu realmente não quero misturar essas imagens com arquivos de aplicativo.

A outra solução, "vá em frente" é implantar o site em uma instância completa do Server 2008 IIS 7.5 toda vez que eu desejar depurar os recursos que usam conteúdo externo, mas isso também é um pouco complicado.

Existe alguma maneira de fazer isso no <System.WebServer />elemento de configuração da Web?


5
Para o Visual Studio 2015, mikedice417.wordpress.com/2015/09/13/… funcionou. O applicationHost.configarquivo está na raiz do projeto: ${PROJECT}\.vs\config\applicationHost.config.
Matt

Aqui há uma resposta que poderia ajudá-lo: https://stackoverflow.com/a/46260607/2472664
Giovanny Farto M.

Respostas:


129

A configuração expressa do IIS é gerenciada por applicationhost.config.
Você pode encontrá-lo em

Pasta Users \ <username> \ Documents \ IISExpress \ config.

Dentro, você pode encontrar a seção de sites que contém uma seção para cada site configurado do IIS Express.

Adicione (ou modifique) uma seção de site como esta:

<site name="WebSiteWithVirtualDirectory" id="20">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="c:\temp\website1" />
   </application>
   <application path="/OffSiteStuff" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="d:\temp\SubFolderApp" />
   </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:1132:localhost" />
   </bindings>
</site>

Praticamente você precisa adicionar uma nova tag de aplicativo no seu site para cada diretório virtual. Você tem muita flexibilidade porque pode definir configurações diferentes para o diretório virtual (por exemplo, uma versão diferente do .Net Framework)

EDIT Agradecemos a Fevzi Apaydın por apontar para uma solução mais elegante.

Você pode obter o mesmo resultado adicionando uma ou mais tags virtualDirectory à tag Application:

<site name="WebSiteWithVirtualDirectory" id="20">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="c:\temp\website1" />
     <virtualDirectory path="/OffSiteStuff" physicalPath="d:\temp\SubFolderApp" />
   </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:1132:localhost" />
   </bindings>
</site>

Referência:


Depois de adicionar cada tag de aplicativo para cada diretório virtual, não consegui executar o aplicativo "offsitestuff". Ex: iisexpress / site: WebSiteWithVirtualDirectory - execute o primeiro aplicativo no caminho "C: \ temp \ website1". Como posso executar o meu segundo aplicativo que contém o caminho "d: \ temp \ SubFolderApp"
Velu

Na seção de ligações, você vê o URL e a porta usados ​​para acessar a raiz do seu site. Portanto, localhost: 1132 é o URL do aplicativo Web instalado em c: \ temp \ website1 localhost: 1132 / OffSiteStuff é o URL do aplicativo Web instalado em d: \ temp \ SubFolderApp.
Be.St.

Alguém sabe se / como posso definir as configurações separadamente para cada projeto (para que eu possa verificar a configuração)? Obrigado
Ian Grainger

1
@Melhor. Gostaria que coisas como o número da porta de um site IIS fossem iguais para todos os desenvolvedores - por isso, gostaria de verificar (algumas) as configurações. Mas não posso fazer isso a partir da localização atual. Queria saber se eu poderia apontar para outro arquivo no estilo de UserAppSettings etc.
Ian Grainger

26
Nota: Embora essas instruções ainda se apliquem ao Visual Studio 2015, o local applicationhost.configfoi alterado. Mais sensatamente que as versões anteriores, agora está localizado na .vs\configsubpasta da sua pasta de soluções.
Richard Moss

91

A abordagem de @ Be.St. É verdadeira, mas incompleta. Só estou copiando a explicação dele para corrigir a parte incorreta.

A configuração expressa do IIS é gerenciada por applicationhost.config.
Você pode encontrá-lo em

Pasta Users \ <username> \ Documents \ IISExpress \ config.

Dentro, você pode encontrar a seção de sites que contém uma seção para cada site configurado do IIS Express.

Adicione (ou modifique) uma seção de site como esta:

<site name="WebSiteWithVirtualDirectory" id="20">
   <application path="/" applicationPool="Clr4IntegratedAppPool">
     <virtualDirectory path="/" physicalPath="c:\temp\website1" />
     <virtualDirectory path="/OffSiteStuff" physicalPath="d:\temp\SubFolderApp" />
   </application>
   <bindings>
      <binding protocol="http" bindingInformation="*:1132:localhost" />
   </bindings>
</site>

Em vez de adicionar um novo bloco de aplicativo, você deve adicionar um novo elemento virtualDirectory ao elemento pai do aplicativo.

Editar - Visual Studio 2015

Se você estiver procurando pelo arquivo applicationHost.config e estiver usando o VS2015, encontrará:

[diretório da solução] /. vs / config / applicationHost.config


4
Existe alguma maneira de aplicar isso dentro do projeto Visual Studio? Em um ambiente com vários desenvolvedores, se alguém verificar o código em sua máquina, o IIS Express local não seria configurado com o diretório virtual e causaria erros de tempo de execução, não?
precisa saber é o seguinte

4
No Visual Studio 2015, o arquivo de configuração do IIS é armazenado no diretório da solução, em uma pasta chamada .vs / config, para que você possa verificá-lo no controle de origem, se desejar.
precisa

Tantas não respostas inundam os resultados do google para esta pergunta em relação ao VS 2012. Isso funciona !!!!
Tim Ogilvy

É possível adicionar um aplicativo separado ao diretório virtual no IIS Express para que eu possa ter dois aplicativos em um domínio?
Denys Alexieiev

6

No VS2013, fiz isso nas seguintes etapas:

1.Clique com o botão direito do mouse no projeto de aplicativo da web e clique em Propriedades

2.Ver a guia "Web" da página Propriedades

3.Em Servidores, com "IIS Express" como a opção padrão da lista suspensa, no "URL do Projeto" altere a URL usando o número da porta para aquele que mais lhe convier. Por exemplo, apaguei o número da porta e adicionei "/ MVCDemo4" após o host local.

4.Clique no botão "Criar diretório virtual".

5. Execute seu projeto e o novo URL será usado


1
Isso não permite que você configure o caminho físico.
Victorio Berra

2

Se você estiver usando o Visual Studio 2013 (pode exigir a edição Pro ou superior), consegui adicionar um diretório virtual a um site do IIS Express (baseado em arquivo) clicando com o botão direito do mouse no site do Gerenciador de Soluções e clicando em Adicionar> Novo diretório virtual. Isso adicionou uma entrada ao arquivo applicationhost.config, como nos métodos manuais descritos aqui.



0

Eu tinha outra coisa: os arquivos em si eram inacessíveis em um ambiente do SBS.

Exclua os arquivos na pasta de configuração (se não conseguir abri-los!) E substitua-os por uma cópia da pasta no seu próprio PC local.

Corrigido para mim :)


Os arquivos em Users \ <username> \ Documents \ IISExpress \ config são protegidos por usuário. Talvez você tenha tentado editá-lo com um usuário diferente. Portanto, para editá-lo, você precisa executar o Bloco de Notas (ou seu editor) no modo Administração. Dessa forma, você pode modificá-lo. Ou exclua e copie como você fez :-)
Be.St.

0

Eu tive que fazer a entrada no arquivo [projeto] .vs \ config \ applicationhost.config.

Antes disso, ele trabalhava na implantação, mas não no código.


0

Em resposta à outra pergunta -

"existe alguma maneira de aplicar isso no projeto Visual Studio? Em um ambiente de vários desenvolvedores, se alguém verificar o código em sua máquina, o IIS Express local não seria configurado com o diretório virtual e causaria erros de tempo de execução. não é? "

Nunca encontrei uma resposta consistente para isso em nenhum lugar, mas descobri que você poderia fazer isso com um evento pós-compilação usando a tarefa XmlPoke no arquivo de projeto do site -

<Target Name="AfterBuild">
    <!-- Get the local directory root (and strip off the website name) -->
    <PropertyGroup>
        <LocalTarget>$(ProjectDir.Replace('MyWebSite\', ''))</LocalTarget>
    </PropertyGroup>

    <!-- Now change the virtual directories as you need to -->
    <XmlPoke XmlInputPath="..\..\Source\Assemblies\MyWebSite\.vs\MyWebSite\config\applicationhost.config" 
        Value="$(LocalTarget)AnotherVirtual" 
        Query="/configuration/system.applicationHost/sites/site[@name='MyWebSite']/application[@path='/']/virtualDirectory[@path='/AnotherVirtual']/@physicalPath"/>
</Target>

Você pode usar essa técnica para apontar qualquer coisa no arquivo antes do IISExpress iniciar. Isso permitiria forçar inicialmente um arquivo applicationHost.config para o GIT (supondo que ele seja ignorado pelo gitignore) e, posteriormente, apontar todos os caminhos no momento da criação. O GIT ignorará quaisquer alterações no arquivo, agora é fácil compartilhá-las.

Em resposta à outra pergunta sobre como adicionar outros aplicativos em um site:

Você pode criar o site no arquivo de hosts do aplicativo, exatamente como o do seu servidor. Por exemplo:

  <site name="MyWebSite" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
      <virtualDirectory path="/" physicalPath="C:\GIT\MyWebSite\Main" />
      <virtualDirectory path="/SharedContent" physicalPath="C:\GIT\SharedContent" />
      <virtualDirectory path="/ServerResources" physicalPath="C:\GIT\ServerResources" />
    </application>
    <application path="/AppSubSite" applicationPool="Clr4IntegratedAppPool">
      <virtualDirectory path="/" physicalPath="C:\GIT\AppSubSite\" />
      <virtualDirectory path="/SharedContent" physicalPath="C:\GIT\SharedContent" />
      <virtualDirectory path="/ServerResources" physicalPath="C:\GIT\ServerResources" />
    </application>
    <bindings>
      <binding protocol="http" bindingInformation="*:4076:localhost" />
    </bindings>
  </site>

Em seguida, use a técnica acima para alterar os locais da pasta no momento da criação.


É possível adicionar um aplicativo separado ao diretório virtual no IIS Express para que eu possa ter dois aplicativos em um domínio?
Denys Alexieiev
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.