與NuGet包相關的項目發佈後生成事件的執行順序是什麼?我有一個NuGet軟件包,將不需要的文件複製到我的輸出目錄(有DLL和EXE,在我的情況下,我不需要後者)。的VS2017在發佈後事件中刪除NuGet文件
del /f /q "$(TargetDir)directory\*.exe"
通常的想法是不行的,很可能是它的VS(的MSBuild)實際拷貝這些文件之前調用。
與NuGet包相關的項目發佈後生成事件的執行順序是什麼?我有一個NuGet軟件包,將不需要的文件複製到我的輸出目錄(有DLL和EXE,在我的情況下,我不需要後者)。的VS2017在發佈後事件中刪除NuGet文件
del /f /q "$(TargetDir)directory\*.exe"
通常的想法是不行的,很可能是它的VS(的MSBuild)實際拷貝這些文件之前調用。
很可能它是在VS(MSBuild)實際複製這些文件之前調用的。
根據註釋的信息:
的
<Target Name="CopyNativeBinaries" AfterTargets="Build">
,這是從包中的目標文件 。
此導入MSBuild目標會在構建完成後執行復制任務,這會導致後期構建中的刪除命令行失敗。這就是CopyNativeBinaries
目標在PostBuildEvent
之後四步的原因。
要解決這個問題,我們可以目標CopyNativeBinaries
後生成後事件命令行轉換爲目標的順序:
具體步驟:
卸載您的項目。然後,在項目的最後,剛剛結束標記,地點如下腳本之前:
<Target Name="DeleteFile" AfterTargets="CopyNativeBinaries">
<ItemGroup>
<FileToDelete Include="$(TargetDir)directory\*.exe"/>
</ItemGroup>
<Exec Command="del /F /Q "@(FileToDelete)""/>
</Target>
此設置後,將DeleteFile
目標CopyNativeBinaries
後執行。
謝謝,差不多。德爾並不喜歡所提供的文件列表,所以給它一個通配符的更直接的解決方案直接解決了它。非常好的想法和後見之明非常合乎邏輯。 :-)'
它不會被NuGet複製文件到輸出目錄,它將成爲MSBuild。你的NuGet包是什麼樣的?我假設它具有所有這些文件在lib目錄中,所以NuGet將在項目文件中添加對這些文件的引用。如果你想避免在NuGet包中使用自定義的MSBuild目標文件,那麼你可以自定義構建,或者只是將任何.exe文件添加到NuGet包中的工具文件夾中。但是我不確定你想要的NuGet包。 –
另外:基於'packages.config'的項目或使用新的'ProjectReference'系統? (後者可以從包中排除資產(compile/contentFIles/...) –
新的。使用較早的(包文件夾),是的,我可以簡單地修改包的本地副本並刪除不必要的文件。但更新的緩存機制並不那麼簡單。如果我能避免它,我並不想改變NuGet。我只是想在完成所有事情之後從我的輸出中刪除一些不必要的文件。我會檢查排除。 –