<p>Does anyone have a good resource on dlls and how they are used / generated in Visual Studio?  A few questions I'm rather hazy on specifically are:</p>

<ul>
<li>How refresh files work</li>
<li>How dll version numbers are generated</li>
<li>The difference between adding a reference by project vs browsing for the specific dll</li>
</ul>

<p>Any other tips are welcome as well.</p>

See the question on
DLL information
for some background.
Version numbers for unmanaged DLLs are stored in the DLL's rc file, same as for an exe.  For managed DLLs I believe it uses AssemblyFileInfo attribute, usually in AssemblyInfo.cs for a Visual Studio generated project:
```
```
[assembly: AssemblyFileVersion("1.0.0.0")]
```
```
If you add the reference by project then VS will be able to copy the correct flavour (debug/release) of the referenced assembly to your output directory. It can also use this information to implicitly add a dependency between the projects so it builds then in the right order.