2008-12-16 93 views
9

我想實現執行以下操作後生成事件VS後生成事件

  1. DLL輸出(1個文件,不是所有的調試爵士)
  2. 寄存器的相對路徑副本輸出DLL到GAC

這是如何完成的?

回答

15

你想要嗎?

copy $(TargetPath) $(TargetDir)..\..\someFolder\myoutput.dll 
regasm $(TargetPath) 

(進入領域下的項目屬性生成後步驟),你可能想看看MS建立

+7

在Microsoft Visual Studio 2010上,這將失敗,並出現9009錯誤:您需要使用regasm的完整路徑,如下所示:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ regasm.exe $( TargetPath) – Contango 2010-10-08 11:48:02

1

。它是我們在工作中使用的。

CodeProject Link & MSDN Ref

+0

是的,MSBuild非常出色。如果你想留在Visual Studio中,你也可以在項目屬性下輸入post-build命令。 – 2008-12-16 13:47:09

7

回車以下爲 「項目屬性 - >生成事件 - >生成後事件命令行:」

xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)" 

或添加以下代碼段項目(如的csproj)文件

<PropertyGroup> 
    <PostBuildEvent>xcopy "$(TargetPath)" "target path" /Y && regasm "$(TargetPath)"</PostBuildEvent> 
</PropertyGroup> 

請注意,建議在副本命令argume周圍加上「」 nts避免包含空格的路徑出現問題。另外請注意,多個命令可以結合使用& &

5

您確定要將其作爲編譯的一部分嗎?如果可以避免,我會建議在解決方案中使用項目引用而不是GAC。複製文件是一回事,但在GAC中註冊是相當侵擾性的,您可能需要考慮代碼編譯的其他環境。像其他開發人員的機器,測試環境/構建服務器等。如果您有構建服務器真的,你應該使用類似NAnt的某種持續集成服務器。

2

我不得不同樣的問題,我掙扎了一下,以便它的工作原理。

在我的情況下,我想要其他方式將SDL dll複製到我的輸出文件夾中。

copy "$(SolutionDir)SDL\lib\x86\SDL.dll" "$(SolutionDir)$(Configuration)\" 

需要注意的是,$(Configuration)將是你的輸出文件夾(如調試或發佈)。

引號是我錯過了,顯然你需要他們,當右側結束\。因此,總是使用它們可能更安全。

希望拯救別人一個5分鐘!

P.S.我使用Visual Studio 2010

0

進入相關問題。這裏的答案有幫助(謝謝!)。

我的方案是在調試我需要在特定位置具有相關DLL的MEF相關應用程序。我遇到了覆蓋之前的版本的問題,因此需要向腳本添加刪除。

delete $(SolutionDir)FileService\$(ProjectName).dll 
copy $(TargetPath) $(SolutionDir)FileService\$(ProjectName).dll 

希望能幫助別人!