2013-07-01 17 views
14

Visual Studio için özel bir proje sistemi oluşturmak istiyorum. Ama çevrimiçi olan bazı materyaller beni biraz karıştırdı. Hepsi VSPackages'e atıfta bulunuyorlar ve anlayabildiğim kadarıyla, bunlar VSIX'ten oldukça farklı şeyler. Mevcut uzantı işlevlerim bir VSIX aracılığıyla sunulmaktadır. VSIX ile yeni bir proje türü sunmak imkansız mı?MEF ve VSIX ile Visual Studio proje sistemi oluşturma

Ayrıca örnek kodlarına baktım ve bazı hata iletisine sahip COM şeyleri. Editörün sözdizimi vurgulama ve malzeme ile genişletilmesi gibi projeler için yeni bir parlak MEF içeriği yok mu?

+0

1) Kullanıcının otomatik olarak bir '.csproj' ve ilişkili dosyaları (veya Visual Studio'da bulunan başka bir dil için proje) oluşturmak için kullanabileceği bir proje şablonu eklemek veya 2) yeni bir yepyeni destek eklemek için mi çalışıyorsunuz? proje sistemi '* .myproj' adlı dosyaları temel alır (örneğin). –

+0

Devam etmek için önceki yorumuma gerçekten ihtiyacım var. Bu kategorilerin her ikisine birden giren birden çok uzantı oluşturdum ve size yardımcı olabileceğim, ancak yalnızca yanlış soruyu yanıtlarken bulmak için zaman harcamak istemiyorum. –

+0

Kesinlikle ikinci. Yeni bir dili entegre etmek istiyorum. – Puppy

cevap

11

Yeni bir proje sistemi için destek uygulamak için MEF desteği/API'si yoktur. Desteği uygulamak için gidebileceğiniz iki yol vardır.

  1. Doğrudan Visual Studio API'sini uygulayın. Bu seçenek son derece karmaşıktır, ancak sizi belirli bir yapı sistemi veya dosya biçimiyle sınırlandırmaz. Bunu seçerseniz, temelde kendi başınıza olursunuz.
  2. Yönetilen Paket Çerçevesi (MPF) kitaplığını başlangıç ​​noktası olarak kullanın. Proje formatınız ve derleme sisteminiz için MSBuild'i kullanmanız kısıtlandığından, bu seçenek çok daha kolaydır.

Seçenek # 2 ile gideceğinizi varsayalım.

MPF kitaplığı bir zamanlar Visual Studio SDK'sinin bir parçasıydı, ancak Visual Studio 2010'un yayınlandığı zamana kadar CodePlex'e taşındı. Bunu kullanmak yerine, bu yazı GitHub'da değiştirdiğim ve yayınladığım bu kitaplığın bir sürümüne odaklanacaktır. Bu kitaplığın diğer sürümlerine göre birçok avantajı vardır, bunlardan bazıları bu bağlantıyı izlediğinizde gösteren readme dosyasında belgelenmiştir.

Managed Package Framework for Visual Studio 2010

Diliniz için destek uygulamak için aşağıdakileri yapmanız gerekir.

  1. Dilinize MSBuild desteği için komut satırı uygulayın.

    • Bir proje dosyası oluşturun.
    • Kendi dilinizde projeler geliştirmek için gerekli bir veya daha fazla MSBuild *.targets oluşturun.
    • Bu, özel yapım görevlerini de yürütmek üzere bir derleme oluşturulmasını içerecektir.
  2. IDE içinde MSBuild projenize destek uygulamak için bir VSPackage oluşturun. Bu, Visual Studio'nun seçtiğiniz dosya uzantısı ile proje dosyalarını açmasına/kaydetmesine/kapatmasına izin verir.

  3. Kullanıcıların diliniz için IDE içinde yeni bir proje oluşturmasına izin vermek için bir veya daha fazla "Proje şablonu" oluşturun.

  4. Kullanıcıların projeye kolayca dosya eklemelerine izin vermek için bir veya daha fazla "Proje Öğesi şablonu" oluşturun.

Bu cevap yalnızca şu anda yüzeyini tarayan, ancak ne yazık ki bu her yönüyle ilgili detaylara girmek için şu anda vaktim yok çok geniş bir soru soruldu ve ettik.

Düzenleme: Dağıtımla ilgili olarak - VSPackage'inizi bir VSIX'in içine ekleyebilir ve eklemelisiniz. Ancak, uzantınızın MSBuild uzantılarını kullanıcı projelerinin (C:\Program Files\MSBuild veya C:\Program Files (x86)\MSBuild) standart erişime sahip olduğu bir konuma yüklemesi gerekeceğinden, özel bir yükleme sağlamak için her şeyi bir yükleyiciye sarmanız gerekir. Bunun için WiX kullanmanızı öneririm; Bu önemsiz değil, ancak ücretsiz, olağanüstü ve güvenilir bir şekilde çalışıyor ve asıldığın zaman kullanmak için çok zor değil.

+0

Bu iyi bir başlangıç ​​gibi görünüyor, ama bir kaç sorum var. Örneğin, varolan uzantımın bir parçası olarak, bu dosya için derleyiciyi yeniden çalıştırmanın çok fazla iş harcayacağı dosyalara yükler ve işlerim. MSBuild yalnızca bir komut satırı anlaşmasıysa, bu zaten yaptığım işi yeniden kullanamayacağım anlamına mı geliyor? İkincisi, bunu mevcut MEF tabanlı VSIX ürünlerimle birlikte kullanmayı tercih ederim, bu yüzden VSPackages'in VSIX ile nasıl oynandığını sormak istiyorum (eğer gerçekte yapıyorlarsa). – Puppy

+0

@DeadMG Paketleme/dağıtım hakkındaki soruları yanıtlamak için cevabımı düzenledim. Kod yeniden kullanımı ile ilgili soruyu cevaplamak için yeterli bilgiye sahip değilim. –

2

Ne yazık ki, Visual Studio API'si gerçekten çirkin. Visual Studio'nun dahili mekanizmaları ile derin bir bütünleşme yapacaksanız, “geçici COM” kullanmanız gerekecektir. Doğrudan veya yönetilen paketleyiciler (Interop Assemblies) aracılığıyla. Karmaşıklıktan kaçınmak için Visual Studio Genişletilebilirlik kavramlarını açıklamaya çalışıyorum ve belgelere faydalı bağlantılar gönderiyorum. Umarım size yardımcı olur.

Visual Studio'yu makrolar, eklentiler, VSPackages ve Yönetilen Genişletilebilirlik Çerçevesi (MEF) uzantıları kullanarak genişletebilirsiniz. Visual Studio 2012'den başlayarak, numaralı Visual Studio Extensions , makroları destekliyor! Ancak, VSPackages kullanın daha fazla fırsat sağlar. Daha fazla ayrıntı Visual Studio 2010 ile başlayarak

için bkz, Visual Studio özelleştirmek için MEF kullanabilirsiniz sadece editör. Bununla birlikte, bir MEF uzantısını bir VSPackage ile birleştirebilirsiniz. Nasıl yapılacağı aşağıdaki linkleri okuyabilirsiniz. Bence

  • MSDN: Managed Extensibility Framework in the Editor
  • MSDN: Getting Started with Editor Extensions

    • MEF kullanımı minör avantajları vardır.

      Visual Studio için özel bir proje türü oluşturmak için Visual Studio Şablonları'u kullanmalısınız. Bu, VSPackage ve başka bir genişletilmiş yöntemden ayrı teknolojidir. Visual Studio'nun yeni tür projeleri desteklemesine ve yeni proje sihirbazı eklemesine izin verir. CodePlex: Multi-Project Templates with Wizard: Visual Studio 2010 Sample

    MSDN: Creating Visual Studio Templates

  • +3

    Bu soruya gerçekten cevap vermiyor. Aslında sadece bağlantıya verilen cevapların cevap olmadığı gerçeğinin yanı sıra, bu bağlantıların çoğunu ziyaret ettim ve henüz okumadığım bir şey değil. Temel soruya cevap vermiyorlar. Bana VS uzantıları hakkında bulabileceğiniz her makaleyi bağlamış gibisiniz. – Puppy

    +0

    Puppy ile Katılıyorum. Cevabınızın hiçbir yerinde bir 'Proje Sistemine (PS) başvurmazsınız. PS ** ** 'in “Visual Studio Templates” değildir. Ayrıca, yayınlamanızın **, ** 'de belirtilen kurallara aykırıdır. [Cevabınız başka bir kalede: bir cevap ne zaman cevap vermez?] (Http://meta.stackexchange.com/questions/225370/your-answer -is-in-bir-başka-kale-ne-bir-cevap-değil-bir cevap) _ – MickyD

    İlgili konular