2017-07-19 11 views
1

カスタムプロジェクトタイプのVisual StudioでNuGet Package Managerを有効にできるかどうかは疑問です。カスタムプロジェクトタイプのNuGetパッケージマネージャー

Visual Studio Project Systemを使用してカスタムプロジェクトタイプを作成しました。ソリューションを右クリックしてNuGetパッケージを管理...操作が失敗しました。プロジェクト[ProjectName]はサポートされていません。 '

テキストエディタでプロジェクトファイルとpackages.configファイルを編集し、コマンドライン(復元、更新)からNuGetコマンドを実行すると機能しますが、CSに利用可能な同じパッケージマネージャを使用したいと思いますおよびVBプロジェクト。これを可能にする簡単な設定があることを願っています。

デフォルトのパッケージをプロジェクトタイプに追加するチュートリアルを見ましたが、開発者がマネージャを使用して新しいパッケージを追加したり、現在のパッケージを更新することを許可します。誰でもこれをやる経験がありますか?

+0

これを有効にするには、NuGetのソースコードを変更する必要があります。 [MSBuildNuGetProjectSystemFactoryクラス(https://github.com/NuGet/NuGet.Client/blob/7985322db49b11340ad4bf0c73247c9bd0096621/src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/ProjectSystems/MSBuildNuGetProjectSystemFactory.cs#L22-L28)は、いくつかのプロジェクトのシステムを示していますNuGetでサポートされています。 –

答えて

0

Visual Basicプロジェクトファイルのすべてのインポートを検索してリバースエンジニアリングした後、そのファイルを使用できるようになりました。インポートされたターゲットの1つでこれが見つかりました。

<!-- Import design time targets for Roslyn Project System. These are only available if Visual Studio is installed. --> 
    <!-- Import design time targets before the common targets, which import targets from Nuget. --> 
    <PropertyGroup> 
    <VisualBasicDesignTimeTargetsPath Condition="'$(VisualBasicDesignTimeTargetsPath)'==''">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\Managed\Microsoft.VisualBasic.DesignTime.targets</VisualBasicDesignTimeTargetsPath> 
    </PropertyGroup> 
    <Import Project="$(VisualBasicDesignTimeTargetsPath)" Condition="'$(VisualBasicDesignTimeTargetsPath)' != '' and Exists('$(VisualBasicDesignTimeTargetsPath)')" /> 

には、Microsoft \ VisualStudioを\ $(MSBuildExtensionsPath)は\マネージドインポートされたファイル\ Microsoft.Managed.DesignTime.targetsを検索した後、私は次のコードを見つけました。

<ProjectCapability Include=" 
          AssemblyReferences; 
          COMReferences; 
          ProjectReferences; 
          PackageReferences; 
          SharedProjectReferences; 
          OutputGroups; 
          AllTargetOutputGroups; 
          VisualStudioWellKnownOutputGroups; 
          SingleFileGenerators; 
          DeclaredSourceItems; 
          UserSourceItems;" /> 

私のプロジェクトターゲットファイルにプロジェクト機能を追加すると、NuGetパッケージが動作します!私はそれらのすべてが必要であるかどうか分からないが、私はそれを絞り込むことができず、その動作は私のアプリケーションにとってうまくいくようだ。

ここには、誰かが検索している場合の機能のリストがあります。 https://github.com/Microsoft/VSProjectSystem/blob/master/doc/overview/project_capabilities.md

編集

ただ、しばらくの間、溶液で働いた後、この問題をフォローアップします。機能の詳細については、こちらを参照してください。 https://docs.microsoft.com/en-us/nuget/visual-studio-extensibility/project-system-support

これでVSにNuGetパッケージマネージャが有効になりますが、インストールは失敗します。解決策は、それを機能させるために多くのクラスを実装する必要があります。

VSの外では、NuGetクライアントのexeでより簡単に動作しますが、カスタムプロジェクト拡張には少し変更が必要です。 NuGetソースをダウンロードした場合、コードではプロジェクトファイルがハードコードされた拡張子のリストのみで更新されることがわかります。したがって、ソリューションパッケージまたはpackages.configファイルを更新または復元する場合は、拡張機能をリストに追加する必要があります。そうすれば、プロジェクトファイルを見つけてその上でアクションを実行します。

+0

ここであなたのソリューションを共有してくれてありがとう、それは答えとしてマークすることができるので、同じ問題を抱える他のコミュニティメンバーに役立つ可能性があります。 –

関連する問題