I would like to deploy a very simple DLL with my C# application, but any DLL that I build in Visual Studio 2008 seems to have a dependency on "Microsoft.VC90.CRT". Is it possible to build a DLL using VS2008 without this dependency? How can I tell what is causing the dependency?
Give this tool a shot: http://www.dependencywalker.com/. It will let you walk through your dependencies on a given exe or dll.
I'm not sure about the latest VC++ versions, but previously you could tell the linker to link with a static version of the MSVCRT runtime library instead of the dynamic (DLL) version. It's possible this option still exists.
According to this MSDN page, static libraries are still available. Go to project properties, configuration properties, C/C++, Code generation, Runtime Library.
Select Multithreaded Debug for the debug configuration, and Multithreaded for the release config. (Not sure if the names are all the same in VS2008, but should be "somewhere around there". Can update tomorrow with VS2008-specific differences)
Also, as wbic16 suggested, use dependency walker to identify other static dependencies.
If you're absolutely sure you don't have any dependencies on the C runtime, then you can avoid linking against it by enabling the "Ignore All Default Libraries" (/NODEFAULTLIB) flag under the Linker -> Input project options page. You may also have to disable basic runtime checks (set "Basic Runtime Checks" to Default under C/C++ -> Code Generation), and you might also have to remove the entry point (set "No Entry Point" to "Yes (/NOENTRY)" under Linker -> Advanced).
See also http://support.microsoft.com/kb/814472, it has some good information about building DLLs for Managed Extensions for C++.
Edit: Notice that running without C runtime also means you don't have easy memory allocation function like malloc() and new.
Make sure your building every thing in release as often in debug, the dll gets linked with special debug dlls that are not normally shipped with windows and will cause dependency issues.