Zmiana domyślnego numeru portu na którym uruchamiana jest przez Visual Studio strona (Web Site)

Wydawać by się mogło, że jest to rzecz banalna. Niestety wcale do końca tak nie jest 😊. Większość projektów webowych, przy których miałem przyjemność pracować, była zdefiniowana jako aplikacja sieciowa (Web Application). Czasem trafiają się jednak projekty, w których źródła i zasoby naszej aplikacji istnieją jedynie w formie folderu na dysku twardym. Visual Studio określa je po prostu jako strony webowe (web site’y). Wewnątrz Solution Explorera możemy rozpoznać je dzięki charakterystycznej ikonce:

Niestety z poziomu Visual Studio nijak nie udało mi się znaleźć możliwości zmiany numeru portu, na którym domyślnie uruchamiany jest na serwerze IIS Express, dodany do naszego rozwiązania WebSite. Na szczęście, okazało się, że jest to jak najbardziej możliwe, wymaga jedynie drobnych ingerencji w pliki, które generowane są przez Visual Studio w sposób automatyczny.

Poniżej znajdziecie krótki poradnik tego, w jaki sposób zmienić wygenerowany losowo domyślny numer portu 3079 na port numer 8080.

  1. Jeżeli jest ono otwarte – zamknij działającą instancję Visual Studio.
  2. Otwórz plik rozwiązania (*.sln) w dowolnym edytorze tekstu. Poniżej widzimy przykładową definicję naszego WebSite’u. Zastąp wszystkie wystąpienia łańcucha znaków „3070” reprezentującego port (oczywiście w Twoim przypadku będzie to prawdopodobnie inny numer) przez „8080”.
Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "TestWebSite", "TestWebSite\", "{F6344134-BB48-4174-99CC-3215BB2F569E}"
	ProjectSection(WebsiteProperties) = preProject
		TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
		Debug.AspNetCompiler.VirtualPath = "/localhost_3079"
		Debug.AspNetCompiler.PhysicalPath = "TestWebSite\"
		Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_3079\"
		Debug.AspNetCompiler.Updateable = "true"
		Debug.AspNetCompiler.ForceOverwrite = "true"
		Debug.AspNetCompiler.FixedNames = "false"
		Debug.AspNetCompiler.Debug = "True"
		Release.AspNetCompiler.VirtualPath = "/localhost_3079"
		Release.AspNetCompiler.PhysicalPath = "TestWebSite\"
		Release.AspNetCompiler.TargetPath = "PrecompiledWeb\localhost_3079\"
		Release.AspNetCompiler.Updateable = "true"
		Release.AspNetCompiler.ForceOverwrite = "true"
		Release.AspNetCompiler.FixedNames = "false"
		Release.AspNetCompiler.Debug = "False"
		VWDPort = "3079"
		SlnRelativePath = "TestWebSite\"
	EndProjectSection
EndProject
  1. Upewnij się, ze w Eksploratorze Windows widoczne są ukryte pliki i foldery.
  2. Usuń z dysku zawartość ukrytego katalogu „.vs” znajdującego się w folderze z naszym rozwiązaniem. Możesz to zrobić bez obaw. Folder zostanie odtworzony przy pierwszym, ponownym uruchomieniu aplikacji za pomocą Visual Studio.
  3. Otwórz plik applicationhost.config znajdujący się w folderze: „.vs\[Nazwa_Twojego_rozwiązania]\config”.
  4. Upewnij się, że definicja Twojego WebSite’u wygląda prawidłowo. Zwróć również uwagę na to, czy przy jego uruchamianiu ustawione jest automatyczne startowanie serwera IIS Express (serverAutoStart=”true”).

Podejrzyj(otworzy się w nowej zakładce)

<site name="TestWebSite" id="1" serverAutoStart="true">
	<application path="/">
		<virtualDirectory path="/" physicalPath="C:\Users\piog\Desktop\TestSolution\TestWebSite" />
	</application>
	<bindings>
		<binding protocol="http" bindingInformation=":8080:localhost" />
	</bindings>
</site>

Czasem może się zdarzyć, że w projektach, w których istnieje więcej niż 1 projekt webowy, konieczna będzie edycja kilku definicji stron w plikach *.SLN i applicationhost.config. Może to wynikać z tego, że np. port numer 8080 będzie już zajęty przez inną aplikację. Upewnij się wtedy, czy nie dochodzi do konfliktów oraz czy ścieżki fizyczne w pliku applicationhost.config zostały prawidłowo wygenerowane dla poszczególnych aplikacji.

To byłoby tyle na dzisiaj.

Wesołych Świąt Wielkiej Nocy (niekoniecznie spędzonych przy komputerze 😉) dla wszystkich Czytelników!

Total Views: 1494 ,
This Article Has 1 Comment
  1. Pingback: dotnetomaniak.pl

Comments are now closed.