2017-05-01 33 views
13

我正在創建一個Visual Studio 2017自定義簽入策略擴展。我目前的解決方案的結構如下:如何在一個VSIX安裝程序中包含來自NuGet包的程序集?

VSIX Solution Structure

注:這是我在新的NuGet PackageReference辦法,這就是爲什麼沒有packages.config文件的優勢。


我相信我有我的設置VSIX清單適當,因爲一切完美的作品時,我不引用Microsoft.Net.Http(原來我是在值硬編碼,而不是檢索值)。我不確定爲什麼包含Microsoft.TeamFoundationServer.ExtendedClient NuGet軟件包不會導致任何問題,而NuGet軟件包的Microsoft.Net.Http確實如此。

我看着調試文件夾,看看正在編譯什麼,我看到每個程序集都需要被拉入,但是如果我解壓縮VSIX(我將它重命名爲* .zip並解壓縮),只有項目組件包括在內; Nuget引用的程序集不包含在VSIX包中。

我碰到了幾個資源,但似乎沒有任何工作:

這些問題/回答每一個人似乎沒有解決我的具體問題。


更新:

我相信這是可能的,所使用的工具來生成VSIX包不支持的NuGet的新PackageReference功能。如果我使用舊的packages.config功能,一切工作正常。我已經加入了UserVoice Ticket以支持新的NuGet功能。

+0

我可能來晚了,但這個線程解決我的問題:https://開頭計算器。 com/questions/42201923/vsix-extension-how-can-i-ensure-a-referenced-dll-or-assembly-is-included-in-th –

+0

@AmauryLevé:這個問題可能已經解決了你的問題,但它是與我所引用的問題完全無關,與VSIX打包程序有關的問題通過NuGet的PackageReference功能自動包含程序集。該問題/答案通過直接引用組件來處理添加資產。 –

回答

1

我是能夠成功地包括在模板中的NuGet包通過執行下列Microsoft教程中介紹的步驟:Packages in Visual Studio templates

的SDK正在使用的MSI可以直接在開發人員的機器上安裝的NuGet包安裝。這使得它們在使用項目或項目模板時立即可用,而不必在此期間提取它們。 ASP.NET模板使用這種方法。

我看到其他人遇到問題,因爲他們使用的NuGet包。對於.NET Core,我使用了Microsoft.Net.Http,雖然它確實需要Microsoft.BCL。除非遇到問題,否則我建議保留遺留系統,特別是因爲這些命名空間似乎是移動目標。

看來System.Net.Http是正確的選擇,至少對於Windows平臺上的.NET。這個軟件包沒有外部依賴關係也沒有任何價值。


編輯: 看來這可能是與PackageReference本身涉及到的錯誤。我看到一個類似的記錄的錯誤here

+0

我想你誤解了我的問題。我不是創建項目或項目模板,而是創建自定義簽入策略。我碰到的問題是生成的VSIX包沒有包含我的程序集依賴的NuGet程序集。您所引用的鏈接是如何確保項目/項目模板自動將NuGet包納入使用這些模板的項目中。此外,這個問題圍繞着NuGet的新PackageReference功能。一切正常,如果我利用NuGet的packages.config方法而不是 –

+0

只是出於好奇,是否有你需要/需要使用NuGet的PackageReference功能的原因? – lax1089

+1

是的,http://blog.nuget.org/20170316/NuGet-now-fully-integrated-into-MSBuild.html - 基本上它有很多好處,是NuGet的未來。 –

0

對於像我們這樣面對這個問題的窮人(nuget + vsix + netstandard + vs組合,每天都是致命的),我發現了一個解決方法,受此帖的啓發:NuGet packages referenced via PackageReference don't include DLLs in VSIX。例如,在這裏,我引用手動4個的NuGet包:

<Target Name="IncludeNuGetPackageReferences" AfterTargets="GetVsixSourceItems"> 
    <ItemGroup> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'Microsoft.Win32.Registry'" /> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'System.CodeDom'" /> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'System.Configuration.ConfigurationManager'" /> 
    <VSIXSourceItem Include="@(ReferenceCopyLocalPaths)" Condition="'%(ReferenceCopyLocalPaths.NuGetPackageId)' == 'System.ServiceProcess.ServiceController'" /> 
    </ItemGroup> 
</Target> 

PS:我在運行Visual Studio 15.5.4

相關問題