2017-04-25 162 views
0

我有一個nuget包,它取決於其他幾個(例如Newtonsoft.Json)。 包不打算作爲一個類庫來使用它只是增加了自定義的MSBuild行動,使封裝的結構看起來像這樣:從nuget包引用nuget包

-package CustomBuildAction 
|-lib/net45/CustomBuildAction.dll 
|-build/CustomBuildAction.targets 

當我安裝包CustomBuildAction.targets正確的的csproj referensed但是當我試圖運行生成我得到一個錯誤:

「CustomBuildAction」任務無法從程序集「path to dll/CustomBuildAction.dll」加載。無法加載文件或程序集「Newtonsoft.Json.dll,Version = ...」或其某個依賴項。

我已將Newtonsoft.Json.dll納入nuspec文件作爲包依賴項,nuget將其顯示爲依賴項,但MSBuild無法解析它。對我來說,它看起來像問題是,我從.targets文件夾的包使用相對路徑(相對於建立文件夾)參照CustomBuildAction.dll,即:

../lib/net45/CustomBuildAction.dll 

但是這個DLL文件不打算放置到它可以找到所有依賴的構建輸出文件夾中。 我該如何解決這個問題?我是否應該將依賴關係包含在軟件包中,還是有另一種解決方法?

+0

如果項目僅由自定義MSBuild操作使用,該項目是否需要引用CustomBuildAction.dll?我只是將它放在.targets文件旁邊的build目錄中,然後從那裏導入它。然後在構建目錄中也有Newtonsoft.Json.dll。 –

+0

@Matt Ward不,不需要將它作爲參考添加到項目中。將嘗試將dll移入生成文件夾,有趣的想法 – Leo

回答

0

MSBuild將從包含任務程序集的文件夾解析任務依賴關係。不幸的是,這意味着你需要將Newtonsoft.Json.dll包含在你的NuGet包中,與你的CustomBuildAction.dll文件一起。

爲了防止程序集在構建輸出中結束,請將程序集放入程序包中的其他文件夾中。例如,工具/只要它不在lib中,它就不會被視爲可供引用的程序集。