2010-02-02 48 views
3

我的VS2008解决方案具有以下设置。C#程序中输出目录中的常见文件

  • PROGRAM1
  • Program2中
  • Common.dll(引用和参照双方PROGRAM1和Program2中)

在调试模式下,我喜欢我的设置输出目录Program Files文件\产品名称,因为一些代码会因各种原因获得exe路径。

我的问题是,编译时,Program1会给出一个错误,如果Program2启动它不能复制Common.dll。反之亦然。

这里的烦恼是,我甚至没有经常对Common.dll进行更改,但是100%的时间会尝试复制它,而不仅仅是在发生更改时。我最终不得不关闭所有程序,然后构建并启动它们。

所以我的问题是,如果Common.dll项目内部有变化,我怎么才能只有VS2008复制Common.dll?

回答

1

我尝试以下,我认为它表明你正在寻找的行为:

  • 变化common.dll项目到了Program Files \产品名称的输出(即相同的程序1和程序2在程序1和程序2项目
  • :设置参考“复制本地”设置为false以common.dll

这样的Visual Studio只尝试,如果复制common.dll其源代码已更改。

1

为什么不直接在Program1和Program2中引用Common.dll而不是复制DLL?这样,最新版本总是可用,并且始终与应用程序一起编译?另外,你可以从Program1/2调试到Common.dll?

+2

我不说复制DLL,它只是通过引用自动发生。 – 2010-02-02 18:09:17

1

而是改变你的输出目录,所以你知道你的可执行文件的位置,为什么不使用:

System.Reflection.Assembly.GetExecutingAssembly().Location 
+0

这也将解决有人没有安装到祝福路径,使用本地化版本的Windows,x64版本等问题。 – 2010-03-27 14:31:45

0

把这样的事情在你的Common.DLL项目

copy $(TargetPath) $($ProjectPath)..\..\Program1\ 
copy $(TargetPath) $($ProjectPath)..\..\Program2\ 

并从引用它们自己的各自的位置。

理想情况下,您应该把所有三个项目放到一个解决方案中,并引用项目,而不是dll的,构建整个解决方案,然后运行它。这需要照顾的这一切全自动:)

+0

Visual Studio会自动执行此操作。问题是运行一次部署的应用程序,而不是在调试器中。 – 2010-03-27 14:29:15

0

我做的(用于调试的原因太)是建立在解决方案级别的“bin”文件夹,对所有项目的项目选项构建选项卡上更改为一个共同的路径输出路径,即“bin \ Debug \”为“solution \ bin \ debug”(解决方案是解决方案路径)。

对于每个“配置”,例如, “解决方案\本\释放”等

让visual studio照顾更新文件等

注意如果您在使用调试,您将无法在新的文件复制反正应用程序的中间,它的锁定等等

PK :-)

+0

这根本不回答问题。重点是应用程序中有多个exe组件可以引用dll。 – 2010-03-30 13:42:25

相关问题