2016-06-21 36 views
37

當試圖添加對VSIX的引用時,它通常將其從.csproj中的引用中引出。但是,如果引用不在.csproj中,因爲它們現在位於project.json文件中,那麼它們不會被拉到vsix。解決方案然後可以編譯,但是當擴展安裝到Visual Studio中時(因爲沒有複製到VSIX的程序集),擴展失敗並顯示「文件未找到」錯誤。將project.json軟件包引用添加到VSIX

我試着用清單的,像這樣的部分:

<Asset Type="Microsoft.VisualStudio.Assembly" d:Source="Project" d:ProjectName="*PROJECTNAME*" Path="|*ASSEMBLYNAME*|" AssemblyName="|*ASSEMBLYNAME*;AssemblyName|" /> 

但它不工作,因爲它不能識別包引用。

經過一番研究,我看到了一個類似的問題與PCL,但是,如果沒有一個答案,而不是同一類型的問題:MEF With Portable Class library using Microsoft Composition MEF2 throws file not found exception

在同一個音符,這似乎是一個可以接受的解決方法:VSIX with Project Templates and NuGet Packages然而,由於據我瞭解,這意味着在安裝過程中使用該軟件包。除此之外,它不適用於我們的情況,因爲他們需要指定包版本,我們正在使用project.json,所以我們可以使用浮動版本(即:2.0。*)

有沒有辦法引用這個project.json引用我們失蹤?也許是一種解決方法?我發現的解決方案似乎都需要在某處「粘貼」de DLL,這對於浮動版本來說並不方便。

在此先感謝您的幫助或意見。

編輯/更新:由於VSIX自動將在引用的csproj任何組件(而不是項目本身),試圖在項目層面得到的DLL似乎不太可能。經過多次嘗試,我認爲有效的解決方法是從輸出文件夾中獲取程序集。然而,就我所知,VSIX沒有辦法做到這一點,或者它呢?

+0

它的奇怪,這是得到這麼多upvotes。不應該在這裏解決這個問題:_不是首先使用project.json? project.json在接下來的幾個月裏將會被拋棄,微軟將開始着手將project.json的功能轉移到老式的csproj中。你爲什麼使用project.json?你需要在Visual Studio擴展上使用dotnet核心嗎?怎麼樣?爲什麼?這麼多的問題! – Joao

+0

[在我之前的評論中有過這種情況,我刪除了]在我們的例子中,我們試圖解決VS 2015 update 3使用比Roslyn老的版本System.Collections.Immutable的事實,所以我們遇到了這個文章解釋如何將該程序集的版本降級到1.1.37,以便構建使用Roslyn的擴展。此時,我們開始遇到DLL未與VSIX軟件包一起部署的問題,並發現這個SO問題與相同的情況。 – fussmonkey

+2

FWIW我聽說project.json正在恢復到project.xxproj - 請參閱此博客文章https://blogs.msdn.microsoft.com/dotnet/2016/05/23/changes-to-project-json/ –

回答

1

我不確定我是否正確理解您的問題,但是如果您嘗試通過VSIX安裝項目模板,並且您希望項目模板在使用時包含所有它的nuget包,則可以執行像這樣的東西。

編輯您的項目模板的xproj文件,並添加以下行:

<ItemGroup> 
    <None Include="project.json"/> 
    <None Include="project.lock.json"/> 
</ItemGroup> 

編輯您的項目模板的vstemplate文件,並在項目節點添加以下行:

<ProjectItem ReplaceParameters="true" TargetFileName="project.json">project.json</ProjectItem> 
<ProjectItem ReplaceParameters="true" TargetFileName="project.lock.json">project.lock.json</ProjectItem> 

這應該是所有你需要這樣做。現在,當您安裝項目模板時,使用該模板創建一個新項目,它應該包含project.json文件中的所有nuget包。

相關問題