What exactly is the difference between the HintPath
in a .csproj file and the ReferencePath
in a .csproj.user
file? We're trying to commit to a convention where dependency DLLs are in a "releases" svn repo and all projects point to a particular release. Since different developers have different folder structures, relative references won't work, so we came up with a scheme to use an environment variable pointing to the particular developer's releases folder to create an absolute reference. So after a reference is added, we manually edit the project file to change the reference to an absolute path using the environment variable.
I've noticed that this can be done with both the HintPath
and the ReferencePath
, but the only difference I could find between them is that HintPath
is resolved at build-time and ReferencePath
when the project is loaded into the IDE. I'm not really sure what the ramifications of that are though. I have noticed that VS sometimes rewrites the .csproj.user
and I have to rewrite the ReferencePath
, but I'm not sure what triggers that.
I've heard that it's best not to check in the .csproj.user
file since it's user-specific, so I'd like to aim for that, but I've also heard that the HintPath
-specified DLL isn't "guaranteed" to be loaded if the same DLL is e.g. located in the project's output directory. Any thoughts on this?
According to this MSDN blog: https://blogs.msdn.microsoft.com/manishagarwal/2005/09/28/resolving-file-references-in-team-build-part-2/
There is a search order for assemblies when building. The search order is as follows:
So, if the desired assembly is found by HintPath, but an alternate assembly can be found using ReferencePath, it will prefer the ReferencePath'd assembly to the HintPath'd one.