Jaka jest dokładnie różnica między HintPath
w pliku .csproj a ReferencePath
w .csproj.user
pliku? Staramy się przestrzegać konwencji, w której biblioteki DLL zależności znajdują się w repozytorium svn „wydań”, a wszystkie projekty wskazują na określone wydanie. Ponieważ różni programiści mają różne struktury folderów, odniesienia względne nie będą działać, więc wymyśliliśmy schemat użycia zmiennej środowiskowej wskazującej na folder wydań konkretnego programisty, aby utworzyć odniesienie bezwzględne. Dlatego po dodaniu odwołania ręcznie edytujemy plik projektu, aby zmienić odwołanie na ścieżkę bezwzględną za pomocą zmiennej środowiskowej.
Zauważyłem, że można to zrobić za pomocą obu HintPath
i ReferencePath
, ale jedyną różnicą, jaką mogłem znaleźć między nimi, jest to, że HintPath
jest to rozwiązywane w czasie kompilacji i ReferencePath
kiedy projekt jest ładowany do IDE. Nie jestem jednak pewien, jakie są tego konsekwencje. Zauważyłem, że VS czasami przepisuje .csproj.user
i muszę przepisać ReferencePath
, ale nie jestem pewien, co to powoduje.
Słyszałem, że najlepiej nie wpisywać .csproj.user
pliku, ponieważ jest on specyficzny dla użytkownika, więc chciałbym dążyć do tego, ale słyszałem też, że HintPath
określona biblioteka DLL nie jest „gwarantowana” do załadowania, jeśli ta sama biblioteka DLL znajduje się np. w katalogu wyjściowym projektu. Jakieś przemyślenia na ten temat?
źródło
Poszukaj w pliku Microsoft.Common.targets
Odpowiedź na pytanie znajduje się w pliku
Microsoft.Common.targets
dla docelowej wersji platformy.W przypadku .Net Framework w wersji 4.0 (i 4.5!) Element AssemblySearchPaths jest zdefiniowany w następujący sposób:
W przypadku .Net Framework 3.5 definicja jest taka sama, ale komentarz jest nieprawidłowy. Definicja 2.0 jest nieco inna, używa $ (OutputPath) zamiast $ (OutDir).
Na moim komputerze mam następujące wersje pliku Microsoft.Common.targets:
Dotyczy to programu Visual Studio 2008, 2010 i 2013 zainstalowanego w systemie Windows 7.
Fakt, że katalog wyjściowy jest przeszukiwany, może być nieco frustrujący (jak wskazuje oryginalny plakat), ponieważ może ukrywać nieprawidłową HintPath. Rozwiązanie buduje się poprawnie na komputerze lokalnym, ale psuje się, gdy tworzysz w czystej strukturze folderów (np. Na komputerze kompilacji).
źródło
Z własnego doświadczenia wiem, że najlepiej jest trzymać się jednego z dwóch rodzajów odniesień do montażu:
Znalazłem (podobnie jak opisałeś) inne metody, które albo są zbyt łatwe do złamania, albo mają irytujące wymagania konserwacyjne.
Każdy zestaw, którego nie chcę GAC, musi żyć w katalogu wykonawczym. Dowolny zestaw, który nie znajduje się lub nie może znajdować się w katalogu wykonywania I GAC (zarządzany przez zdarzenia kompilacji automatycznej).
Jak dotąd nie sprawiało mi to żadnych problemów. Chociaż jestem pewien, że jest sytuacja, w której to nie zadziała, zwykle odpowiedzią na każdy problem było „och, po prostu GAC to!”. 8 D
Mam nadzieję, że to pomoże!
źródło
Chociaż jest to stary dokument, pomógł mi rozwiązać problem ignorowania ścieżki „HintPath” na innym komputerze. Było tak, ponieważ przywoływana biblioteka DLL również musiała znajdować się w kontroli źródła:
https://msdn.microsoft.com/en-us/library/ee817675.aspx#tdlg_ch4_includeoutersystemassemblieswithprojects
Fragment:
źródło