Die Projekt-Struktur ist in TFS, Subversion oder einem anderen zentralen Repository eindeutig definiert und auf jeden lokalen Rechner übertragbar.
Leider ist der Einstiegspunkt - der Root - für das enthaltene in der Repository Projekt auf jedem Rechner anders. Das Projekt-Root-Verzeichnis kann vom Entwickler ausgewählt werden - "c:\dev", "c:\tfs", "c:\Subversion", "c:\Projekte". Manchmal muss es wegen Platzmängel auf einem anderen Laufwerk gespeichert werden - "d:\Projekte". Manchmal wird es wegen der Backup-Richtlinien von Unternehmen-IT dem Entwickler fest zugeordnet - "C:\Users\hansmustermann\Documents\Visual Studio 2015\Projects".
Um Kompilierungs- bzw. Deploying-Probleme zu vermeiden, werden innerhalb der Repository relative Pfade z.B. "..\..\bin\Debug" genutzt. Manchmal wird aber ein absoluter Pfad, z.B. in der Konfigurationsdatei oder als Kommandozeilen-Befehl, vorausgesetzt. Wegen des unterschiedlichen auf jedem Rechner Projekt-Root-Verzeichnisses ist der absolute Pfad in einem solchen Fall leider unbrauchbar.
Vorgegeben werden NuGet-Packages in demselben Order gespeichert, wo sich die Solution befindet - $(Solutiondir)\Packages
Gibt es allerdings mehrere Solutions und sind sie unterschiedlich in der Verzeichnisstruktur verschachtelt, so werden auch die Packages-Ordner unterschiedlich verschaltet.
Es führt zu Konflikten in den Assembly-Referenzen in Projekt-Dateien (*.csproj) die zu mehreren Solutions gehören.
<Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
<HintPath>
..\..\packages\Serilog.1.5.14\lib\net45\Serilog.dll</HintPath>
<Private>True</Private>
</Reference>
Deshalb muss der Speicherort von NuGet-Repository in der Datei NuGet.Config zentralisiert werden.
<config>
<add key="repositoryPath" value="
D:\dev\MyProduct\Packages" />
</config>
Quelle:
https://docs.nuget.org/consume/nuget-config-settings
Wegen des unterschiedlichen Root-Verzeichnisses würde der absolute Repository Path auf jedem Entwickler-Rechner anders aussehen.
Der Projekt-Speicherort, obwohl auf jedem Entwickler-Rechner woanders lokalisiert, kann mit dem folgenden Kommandozeilen-Befehl vereinheitlicht werden.
Quelle:
http://www.i8086.de/dos-befehle/subst.html
Zusätzlich ist es noch ratsam das temporäre Laufwerk zu definieren.
Dank der o.g. Lösung wird der Projekt-Pfad einheitlich und kürzer. Jetzt steht nichts mehr im Wege die Log-Datei - "t:\DotNet.log" - oder die zentrale NuGet-Repository - "P:\Packages" - zu definieren.