Visual Studio: Relative Assembly References Paths
Asked Answered
P

6

108

When adding a reference to an assembly located within the solution directory, is there any way to add it relatively, so that when checked in and out of a repository it is referenced in projects correctly?

Parr answered 31/7, 2009 at 4:54 Comment(2)
If it doesn't quite work from the UI, remember that you can just hand-edit the .proj file directly and change the path to relative. Once you change it either way, it stays the way you've put it.Area
In Visual Studio 2010 reference paths are stored as relative by default, so if this is happening to you something else is wrong. In my case it was I'd blanket ignored dlls from version control so I could compile the solution but my workmates couldn't.Selfpossession
D
135

To expand upon Pavel Minaev's original comment - The GUI for Visual Studio supports relative references with the assumption that your .sln is the root of the relative reference. So if you have a solution C:\myProj\myProj.sln, any references you add in subfolders of C:\myProj\ are automatically added as relative references.

To add a relative reference in a separate directory, such as C:/myReferences/myDLL.dll, do the following:

  1. Add the reference in Visual Studio GUI by right-clicking the project in Solution Explorer and selecting Add Reference...

  2. Find the *.csproj where this reference exist and open it in a text editor

  3. Edit the < HintPath > to be equal to

    <HintPath>..\..\myReferences\myDLL.dll</HintPath>

This now references C:\myReferences\myDLL.dll.

Dish answered 18/11, 2009 at 15:21 Comment(5)
I understand that this is helpful and correct, but does the VS gui seriously not provide a way to add a relative reference?Occlude
In VS 2015 I got this behavior by default (relative path)Jeweljeweler
I was convinced that it had added an absolute path, till I followed your directions out of curiosity. VS showed an absolute path in the reference properties, but <HintPath> showed as already relative. Turns out I was missing files O_o lolimaderp!Gal
@Gal That got me confused too. They should also show the relative path on the properties paneDelores
You don't have to directly edit the project file. Select "browse" in the add reference dialog, navigate to the folder with your project file, then add the relative path to your DLL. Although an absolut path is displayed in the properties window, the relative path is saved to the project file. VS really should display the path just like it is saved in the project file.Sanburn
T
9

Yes, just create a directory in your solution like lib/, and then add your dll to that directory in the filesystem and add it in the project (Add->Existing Item->etc). Then add the reference based on your project.

I have done this several times under svn and under cvs.

Taitaichung answered 31/7, 2009 at 4:58 Comment(2)
You don't need to add the dll to the project itself, just add reference to it. The best thing to do is to add the whole 'lib' directory to your source control. See code.google.com/p/projectpilot/source/browse/#svn/trunk as an exampleCichlid
You are right. I checked an old project and neither the directory or the dlls were added to the project itself, just to the repository. And the reference is then relative to the project. Sorry about that.Taitaichung
B
6

In VS 2017 it is automatic. So just Add Reference as usually.

Note that in Reference Properties absolute path is shown, but in .vbproj/.csproj relative is used.

<Reference Include="NETnetworkmanager">
      <HintPath>..\..\libs\NETnetworkmanager.dll</HintPath>
      <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference>
Babur answered 21/6, 2018 at 9:29 Comment(1)
error MSB4066: The attribute "Include" in element <Reference> is unrecognized.Weinert
F
2

Probably, the easiest way to achieve this is to simply add the reference to the assembly and then (manually) patch the textual representation of the reference in the corresponding Visual Studio project file (extension .csproj) such that it becomes relative.

I've done this plenty of times in VS 2005 without any problems.

Fiann answered 31/7, 2009 at 5:10 Comment(1)
I think it is not necessary to modify the project file manually. In my experience Visual Studio always uses relative pathes. The only time I had to modify the project file by hand was when I wanted to share a key file (.snk). Visual Studio always just copies the key file into the project directory which results in several copies of the key file.Lactalbumin
S
1

I might be off here, but it seems that the answer is quite obvious: Look at reference paths in the project properties. In our setup I added our common repository folder, to the ref path GUI window, like so

Reference Paths in VS20xx

That way I can copy my dlls (ready for publish) to this folder and every developer now gets the updated DLL every time it builds from this folder.

If the dll is found in the Solution, the builder should prioritize the local version over the published team version.

Sori answered 14/11, 2019 at 10:10 Comment(2)
Unfortunately this is kept in the csproj.user file and is not relative.Goose
By my expectations, the path specified in "Reference paths" should act as an additional search path for referenced DLLs when the app is started from VS in debugger by F5. But it is not.Digitigrade
W
0

As mentioned before, you can manually edit your project's .csproj file in order to apply it manually.

I also noticed that Visual Studio 2013 attempts to apply a relative path to the reference hintpath, probably because of an attempt to make the project file more portable.

Whitfield answered 6/7, 2015 at 17:41 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.