2012-04-29 56 views
1

我在VS2010中有一個C控制檯程序,我想編輯/調試/構建爲單個項目。也就是說,我想寫它並調試它,就好像它是一個香草控制檯exe文件,但它會產生一個dll作爲副產品。我在SO上找到以下信息(Making a C# project DLL and EXE從單個項目和代碼庫編輯,調試和構建c dll和exe

該DLL項目應該包含所有可重用的代碼。正常的項目應該是您正在構建的應用程序,它將引用您的可重用DLL。這樣,您可以在DLL項目中構建一個框架,該框架可用於任何未來的項目。

其他方面的話,我發現這一點:https://stackoverflow.com/questions/7054481/how-to-produce-a-mix-of-dll-and-exe-in-one-c-sharp-project

你可以參考.NET可執行文件,就好像它是一個DLL無論如何,但你可以考慮的exe文件複製到同一個DLL文件同名... 您可以使用Visual Studio後生成事件爲您的項目自動執行此過程。這會處理你有一個成功構建每次創建DLL複製: 複製 「$(TARGETPATH)」 「$(TARGETDIR)$(的TargetName).dll文件」

這似乎是第一個選項意味着維持2差異項目。有沒有理由這樣做,而不是做第二個職位的建議,只是複製我的exe整個豬,並將擴展名從exe改爲dll?

+1

這是可能的託管語言,但不是C.本地DLL有不同的CRT啓動代碼。原生EXE不可重定位,並且不支持導出的函數。更大的問題是,如果可能的話,你會在main()函數中寫出什麼。你不能寫在你的EXE項目的main()函數中。編寫單元測試僅用於測試導出的函數,因爲這是使用您的DLL的任何代碼可用的唯一的東西。還要考慮創建一個靜態庫的第三個項目,其中一個可以鏈接到DLL和EXE項目中。 –

回答

0

Hans Passant回答了這個問題,但我不能將它標記爲已回答,因爲這是一條評論。所以這裏是他的答案:

「這是可能的託管語言,但不是在C本地DLL有不同的CRT啓動代碼。而本機EXE不可重定位,不支持導出的函數。是,如果可能的話,你在main()函數中寫的是什麼,你不能寫在你的EXE項目的main()函數中,編寫單元測試只測試導出的函數,因爲這是唯一可用的任何使用你的DLL的代碼也可以考慮創建一個靜態庫的第三個項目,你可以在你的DLL和EXE項目中鏈接這兩個項目「