csc.exe引用外部.dll文件

我正在尝试使用Growl C# API制作一个简单的c#程序。

我试图用两种不同的方式来编译我的程序:

1)我保存我的.dll文件在我的.cs文件相同的目录中。 比我跑了

 csc /r:Growl.Connector.dll,Growl.CoreLibrary.dll /out:test.exe *.cs 

它编译好,也运行良好。

2)现在我已经创build了一个名为growl工作目录,并保存了所有的.dll引用。

现在当我尝试使用下面的命令编译它

 csc /r:"D:\Modified\Growl_NET_Connector_SDK\libraries\growl\Growl.Connector.dll","D: \Modified\Growl_NET_Connector_SDK\libraries\growl\Growl.CoreLibrary.dll" /out:test.exe *.cs 

它编译得很好,但是当我试图运行它时,发生了下面提到的exception。

 Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'Growl.Connector, Version=2.0.0.0, Culture=n eutral, PublicKeyToken=980c2339411be384' or one of its dependencies. The system cannot find the file specified. at GrowlNotification.Program.Main(String[] args) 

所以,我的问题是当文件在外部文件夹中时,在csc引用.dll文件的正确方法是什么。

这是第二种情况的目录结构 。

所以,我的问题是当文件在外部文件夹中时,在csc中引用.dll文件的正确方法是什么。

您已经在构建时引用了它们。 你只需要在执行时使它们可用,但是当你想运行它的时候,把它们拷贝到可执行文件所在的目录中。

你也可以使用全局程序集缓存进行调查,如果这些是有签名的程序集,但是个人而言,我会坚持只保留它所依赖的库的可执行文件。

您可以在编译时使用/ lib和/ reference命令行开关添加这些开关。

http://msdn.microsoft.com/en-us/library/s5bac5fx.aspx

但是 (从文章引用)

使用/ lib的替代方法是将任何所需的程序集复制到工作目录中; 这将允许您简单地将程序集名称传递给/ reference。 然后可以从工作目录中删除程序集。 由于程序集清单中未指定相关程序集的路径,因此可以在目标计算机上启动应用程序,并在全局程序集缓存中查找和使用程序集。

因为编译器可以引用程序集并不意味着公共语言运行库将能够在运行时查找和加载程序集。 有关运行时如何搜索引用程序集的详细信息,请参阅运行时定位程序集。

所以Jon Skeet的回答比较好。 (我只是增加了这个提供更多的信息,而不是我可以在评论中,而不是一个答案。Jon的答案是最好的国际海事组织)

您可以创建符号链接到您的库文件夹中的程序集,所以你只需要保持更新在一个位置。