2017-10-28 293 views
0

與NuGet包相關的項目發佈後生成事件的執行順序是什麼?我有一個NuGet軟件包,將不需要的文件複製到我的輸出目錄(有DLL和EXE,在我的情況下,我不需要後者)。的VS2017在發佈後事件中刪除NuGet文件

del /f /q "$(TargetDir)directory\*.exe" 

通常的想法是不行的,很可能是它的VS(的MSBuild)實際拷貝這些文件之前調用。

+0

它不會被NuGet複製文件到輸出目錄,它將成爲MSBuild。你的NuGet包是什麼樣的?我假設它具有所有這些文件在lib目錄中,所以NuGet將在項目文件中添加對這些文件的引用。如果你想避免在NuGet包中使用自定義的MSBuild目標文件,那麼你可以自定義構建,或者只是將任何.exe文件添加到NuGet包中的工具文件夾中。但是我不確定你想要的NuGet包。 –

+0

另外:基於'packages.config'的項目或使用新的'ProjectReference'系統? (後者可以從包中排除資產(compile/contentFIles/...) –

+0

新的。使用較早的(包文件夾),是的,我可以簡單地修改包的本地副本並刪除不必要的文件。但更新的緩存機制並不那麼簡單。如果我能避免它,我並不想改變NuGet。我只是想在完成所有事情之後從我的輸出中刪除一些不必要的文件。我會檢查排除。 –

回答

1

很可能它是在VS(MSBuild)實際複製這些文件之前調用的。

根據註釋的信息:

<Target Name="CopyNativeBinaries" AfterTargets="Build">,這是從包中的目標文件 。

此導入MSBuild目標會在構建完成後執行復制任務,這會導致後期構建中的刪除命令行失敗。這就是CopyNativeBinaries目標在PostBuildEvent之後四步的原因。

要解決這個問題,我們可以目標CopyNativeBinaries後生成後事件命令行轉換爲目標的順序:

具體步驟:

  1. 刪除生成後事件。
  2. 卸載您的項目。然後,在項目的最後,剛剛結束標記,地點如下腳本之前:

    <Target Name="DeleteFile" AfterTargets="CopyNativeBinaries"> 
        <ItemGroup> 
        <FileToDelete Include="$(TargetDir)directory\*.exe"/> 
        </ItemGroup> 
        <Exec Command="del /F /Q &quot;@(FileToDelete)&quot;"/> 
    </Target> 
    

此設置後,將DeleteFile目標CopyNativeBinaries後執行。

+0

謝謝,差不多。德爾並不喜歡所提供的文件列表,所以給它一個通配符的更直接的解決方案直接解決了它。非常好的想法和後見之明非常合乎邏輯。 :-)'' –

相關問題