Aracılığıyla paylaş


Visual Studio tümleştirmesi (MSBuild)

Visual Studio, yönetilen projeleri yüklemek ve oluşturmak için MSBuild'i barındırıyor. Projeden MSBuild sorumlu olduğundan, proje farklı bir araç tarafından yazılmış ve özelleştirilmiş bir derleme işlemine sahip olsa bile, MSBuild biçimindeki neredeyse tüm proje Visual Studio'da başarıyla kullanılabilir.

Bu makalede, Visual Studio'da yüklemek ve oluşturmak istediğiniz projeleri ve .targets dosyalarını özelleştirirken dikkate alınması gereken Visual Studio'nun MSBuild barındırmasının belirli yönleri açıklanmaktadır. Bunlar, IntelliSense ve hata ayıklama gibi Visual Studio özelliklerinin özel projenizde çalıştığından emin olmanıza yardımcı olur.

C++ projeleri hakkında bilgi için bkz . Proje dosyaları.

Proje dosya adı uzantıları

MSBuild.exe, .*proj deseni ile eşleşen tüm proje dosya adı uzantılarını tanır. Ancak Visual Studio, projeyi yükleyecek dile özgü proje sistemini belirleyen bu proje dosya adı uzantılarının yalnızca bir alt kümesini tanır. Visual Studio'da dilden bağımsız MSBuild tabanlı bir proje sistemi yoktur.

Örneğin, C# proje sistemi .csproj dosyalarını yükler, ancak Visual Studio bir .xxproj dosyası yükleyemez. Rastgele bir dildeki kaynak dosyalar için bir proje dosyası, Visual Studio'da yüklenecek Visual Basic veya C# proje dosyalarıyla aynı uzantıyı kullanmalıdır.

İyi bilinen hedef adları

Visual Studio'da Oluştur komutuna tıklanması, projede varsayılan hedefi yürütür. Bu hedef genellikle olarak da adlandırılır Build. Yeniden Oluştur veya Temizle komutu seçildiğinde projede aynı ada sahip bir hedef yürütülmeye çalışılır. Yayımla'ya tıkladığınızda projede adlı PublishOnly bir hedef yürütülür.

Yapılandırmalar ve platformlar

Yapılandırmalar MSBuild projelerinde öznitelik içeren Condition bir PropertyGroup öğede gruplandırılmış özelliklere göre temsil edilir. Visual Studio, görüntülenecek proje yapılandırmalarının ve platformlarının listesini oluşturmak için bu koşullara bakar. Bu listeyi başarıyla ayıklamak için koşulların aşağıdakine benzer bir biçime sahip olması gerekir:

Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "
Condition=" '$(Configuration)' == 'Release' " 
Condition=" '$(Something)|$(Configuration)|$(SomethingElse)' == 'xxx|Debug|yyy' "

Visual Studio, bu amaçla , ItemGroup, , Importözelliği ve öğe öğelerindeki PropertyGroupkoşullara bakar.

Ek derleme eylemleri

Visual Studio, dosya özellikleri penceresinin Derleme Eylemi özelliğiyle projedeki bir dosyanın öğe türü adını değiştirmenize olanak tanır. Derleme, EmbeddedResource, İçerik ve Hiçbiri öğe türü adları her zaman projenizde bulunan diğer öğe türü adlarıyla birlikte bu menüde listelenir. Özel öğe türü adlarının bu menüde her zaman kullanılabildiğinden emin olmak için, adları adlı AvailableItemNamebir öğe türüne ekleyebilirsiniz. Örneğin, proje dosyanıza aşağıdakileri eklemek, dosyayı içeri aktaran tüm projeler için özel JScript türünü bu menüye ekler:

<ItemGroup>
    <AvailableItemName Include="JScript"/>
</ItemGroup>

Öğe türü adlarının öğe türüne AvailableItemName eklenmesi, bu türdeki öğelerin Çözüm Gezgini görünmesine neden olur.

Dekont

Bazı öğe türü adları Visual Studio için özeldir ancak bu açılan listede listelenmez.

İşlem içi derleyiciler

Mümkün olduğunda, Visual Studio daha yüksek performans için Visual Basic derleyicisinin işlem içi sürümünü kullanmayı dener. (C# için geçerli değildir.) Bunun doğru çalışması için aşağıdaki koşulların karşılanması gerekir:

  • Projenin hedefinde Visual Basic projeleri için adlı Vbc bir görev olmalıdır.

  • Görevin UseHostCompilerIfAvailable parametresi true olarak ayarlanmalıdır.

Tasarım zamanı IntelliSense

Derleme bir çıkış derlemesi oluşturmadan önce Visual Studio'da IntelliSense desteği almak için aşağıdaki koşulların karşılanması gerekir:

  • adlı Compilebir hedef olmalıdır.

  • Compile Hedef veya bağımlılıklarından biri, veya Vbcgibi Csc proje için derleyici görevini çağırmalıdır.

  • Compile Hedef veya bağımlılıklarından biri derleyicinin IntelliSense için gerekli tüm parametreleri, özellikle de tüm başvuruları almasına neden olmalıdır.

  • İşlem içi derleyiciler bölümünde listelenen koşulların karşılanması gerekir.

Çözüm oluşturma

Visual Studio'da çözüm dosyası ve proje derleme sıralaması Visual Studio tarafından denetlenmektedir. Komut satırında msbuild.exe ile bir çözüm oluştururken, MSBuild çözüm dosyasını ayrıştırıp proje derlemelerini sıralar. Her iki durumda da projeler tek tek bağımlılık sırasına göre oluşturulur ve projeden projeye başvurular arasında geçiş yapılmaz. Buna karşılık, tek tek projeler msbuild.exe ile oluşturulduğunda projeden projeye başvurular geçirilir.

Visual Studio'da derleme yaparken özelliği $(BuildingInsideVisualStudio) olarak trueayarlanır. Bu, derlemenin farklı davranmasına neden olmak için projenizde veya .targets dosyalarınızda kullanılabilir.

Özellikleri ve öğeleri görüntüleme

Visual Studio belirli özellik adlarını ve değerlerini tanır. Örneğin, bir projedeki aşağıdaki özellik, Windows Uygulaması'nın Proje Tasarım Aracı Uygulama Türü kutusunda görünmesine neden olur.

<OutputType>WinExe</OutputType>

Özellik değeri Project Tasarım Aracı düzenlenebilir ve proje dosyasına kaydedilebilir. Böyle bir özelliğe el ile düzenleme yoluyla geçersiz bir değer verilirse, proje yüklendiğinde Visual Studio bir uyarı gösterir ve geçersiz değeri varsayılan değerle değiştirir.

Visual Studio bazı özellikler için varsayılan değerleri anlar. Bu özellikler, varsayılan olmayan değerlere sahip olmadığı sürece proje dosyasında kalıcı olmaz.

Rastgele adlara sahip özellikler Visual Studio'da görüntülenmez. Visual Studio'daki rastgele özellikleri değiştirmek için proje dosyasını XML düzenleyicisinde açmanız ve el ile düzenlemeniz gerekir. Daha fazla bilgi için bu konunun devamında yer alan Visual Studio'da proje dosyalarını düzenleme bölümüne bakın.

Projede rastgele öğe türü adlarıyla tanımlanan öğeler varsayılan olarak proje düğümlerinin altındaki Çözüm Gezgini görüntülenir. Bir öğeyi görüntüden gizlemek için meta verileri olarak falseayarlayınVisible. Örneğin, aşağıdaki öğe derleme işlemine katılır ancak Çözüm Gezgini görüntülenmez.

<ItemGroup>
    <IntermediateFile Include="cache.temp">
        <Visible>false</Visible>
    </IntermediateFile>
</ItemGroup>

Dekont

Visible Meta veriler C++ projeleri için Çözüm Gezgini tarafından yoksayılır. Öğeler false olarak ayarlansa Visible bile her zaman gösterilir.

Projeye aktarılan dosyalarda bildirilen öğeler varsayılan olarak görüntülenmez. Derleme işlemi sırasında oluşturulan öğeler hiçbir zaman Çözüm Gezgini görüntülenmez.

Öğeler ve özelliklerle ilgili koşullar

Derleme sırasında tüm koşullara tam olarak uyulur.

Görüntülenecek özellik değerleri belirlenirken, Visual Studio'da yapılandırma bağımlı olarak kabul edilen özellikler yapılandırmadan bağımsız olarak değerlendirildiğinden farklı değerlendirilir. Yapılandırmaya bağımlı olarak değerlendiren özellikler için Visual Studio, ve Platform özelliklerini uygun şekilde ayarlar Configuration ve MSBuild'e projeyi yeniden değerlendirmesi talimatı verir. Yapılandırmayı bağımsız olarak değerlendiren özellikler için koşulların nasıl değerlendirileceği belirsizdir.

Öğelerdeki koşullu ifadeler, öğenin Çözüm Gezgini görüntülenip görüntülenmeyeceğine karar vermek amacıyla her zaman yoksayılır.

Hata ayıklama

Çıktı derlemesini bulup başlatmak ve hata ayıklayıcısını eklemek için Visual Studio'da , AssemblyNameve OutputType özellikleri OutputPathdoğru şekilde tanımlanmalıdır. Derleme işlemi derleyicinin bir .pdb dosyası oluşturmasına neden olmadıysa hata ayıklayıcı eklenmez.

Tasarım zamanı hedef yürütme

Visual Studio, bir projeyi yüklerken belirli adlarla hedefleri yürütmeye çalışır. Bu hedefler , , ResolveAssemblyReferences, ResolveCOMReferencesGetFrameworkPathsve CopyRunEnvironmentFileshedeflerini içerirCompile. Visual Studio bu hedefleri çalıştırarak derleyicinin IntelliSense sağlamak üzere başlatılabilmesini, hata ayıklayıcının başlatılabilmesini ve Çözüm Gezgini'de görüntülenen başvuruların çözümlenebilmesini sağlar. Bu hedefler mevcut değilse, proje düzgün yüklenir ve oluşturulur, ancak Visual Studio'daki tasarım zamanı deneyimi tam olarak işlevsel olmaz.

Visual Studio'da proje dosyalarını düzenleme

Bir MSBuild projesini doğrudan düzenlemek için proje dosyasını Visual Studio XML düzenleyicisinde açabilirsiniz.

Visual Studio'da bir proje dosyasının yüklemesini kaldırmak ve düzenlemek için

  1. Çözüm Gezgini'da, projenin kısayol menüsünü açın ve ardından Projeyi Kaldır'ı seçin.

    Proje işaretlendi (kullanılamıyor).

  2. Çözüm Gezgini, kullanılamayan projenin kısayol menüsünü açın ve proje dosyasını> düzenle'yi <seçin.

    Proje dosyası Visual Studio XML Düzenleyicisi'nde açılır.

  3. Proje dosyasını düzenleyin, kaydedin ve kapatın.

  4. Çözüm Gezgini'da, kullanılamayan projenin kısayol menüsünü açın ve ardından Projeyi Yeniden Yükle'yi seçin.

IntelliSense ve doğrulama

Proje dosyalarını düzenlemek için XML düzenleyicisi kullanılırken IntelliSense ve doğrulama, MSBuild şema dosyaları tarafından yönlendirilir. Bunlar, Visual Studio yükleme dizini>\Xml\Schemas\1033\MSBuild içinde <bulunabilen şema önbelleğine yüklenir.

Temel MSBuild türleri Microsoft.Build.Core.xsd içinde tanımlanır ve Visual Studio tarafından kullanılan yaygın türler Microsoft.Build.CommonTypes.xsd içinde tanımlanır. Özel öğe türü adları, özellikleri ve görevleri için IntelliSense ve doğrulamaya sahip olacak şekilde şemaları özelleştirmek için Microsoft.Build.xsd dosyasını düzenleyebilir veya CommonTypes veya Core şemalarını içeren kendi şemanızı oluşturabilirsiniz. Kendi şemanızı oluşturursanız, Xml düzenleyicisini Özellikler penceresini kullanarak bulması için yönlendirmeniz gerekir.

Yüklenen proje dosyalarını düzenleme

Visual Studio, proje dosyalarının ve proje dosyaları tarafından içeri aktarılan dosyaların içeriğini önbelleğe alır. Yüklenen bir proje dosyasını düzenlerseniz, Visual Studio değişikliklerin etkili olması için otomatik olarak projeyi yeniden yüklemenizi ister. Ancak, yüklenen bir proje tarafından içeri aktarılan bir dosyayı düzenlerseniz yeniden yükleme istemi olmaz ve değişikliklerin etkili olması için projeyi el ile kaldırıp yeniden yüklemeniz gerekir.

Çıkış grupları

Microsoft.Common.targets içinde tanımlanan çeşitli hedeflerin adları veya OutputGroupDependenciesile OutputGroups biter. Visual Studio, proje çıktılarının belirli listelerini almak için bu hedefleri çağırır. Örneğin hedef, SatelliteDllsProjectOutputGroup bir derlemenin oluşturacağı tüm uydu derlemelerinin listesini oluşturur. Bu çıkış grupları yayımlama, dağıtım ve projeden projeye başvurular gibi özellikler tarafından kullanılır. Bunları tanımlamayan projeler Visual Studio'da yüklenip derlenir, ancak bazı özellikler düzgün çalışmayabilir.

Başvuru çözümlemesi

Başvuru çözümlemesi, gerçek derlemeleri bulmak için proje dosyasında depolanan başvuru öğelerini kullanma işlemidir. Özellikler penceresinde her başvurunun ayrıntılı özelliklerini göstermek için Visual Studio başvuru çözümlemesini tetiklemelidir. Aşağıdaki listede üç başvuru türü ve bunların nasıl çözümlendikleri açıklanmaktadır.

  • Derleme başvuruları:

    Proje sistemi, iyi bilinen adlı ResolveAssemblyReferencesbir hedefi çağırır. Bu hedef, öğe türü adına ReferencePathsahip öğeler üretmelidir. Bu öğelerin her biri, başvurunun tam yolunu içeren bir öğe belirtimine (öğenin özniteliğinin değeri Include ) sahip olmalıdır. Öğelerde, aşağıdaki yeni meta verilerin yanı sıra giriş öğelerindeki tüm meta veriler geçirilmelidir:

    • CopyLocal, derlemenin true veya false olarak ayarlanmış çıkış klasörüne kopyalanıp kopyalanmayacağını belirtir.

    • OriginalItemSpec, başvurunun özgün öğe belirtimini içerir.

    • ResolvedFrom, .NET Framework dizininden çözümlendiyse "{TargetFrameworkDirectory}" olarak ayarlayın.

  • COM başvuruları:

    Proje sistemi, iyi bilinen adlı ResolveCOMReferencesbir hedefi çağırır. Bu hedef, öğe türü adına ComReferenceWrapperssahip öğeler üretmelidir. Bu öğelerin her biri, COM başvurusu için birlikte çalışma derlemesinin tam yolunu içeren bir öğe belirtimine sahip olmalıdır. Öğelerde, adıyla CopyLocalyeni meta verilerin yanı sıra, derlemenin true veya false olarak ayarlanmış çıkış klasörüne kopyalanıp kopyalanmayacağını belirten giriş öğelerindeki tüm meta veriler geçirilmelidir.

  • Yerel başvurular

    Proje sistemi, iyi bilinen adlı ResolveNativeReferencesbir hedefi çağırır. Bu hedef, öğe türü adına NativeReferenceFilesahip öğeler üretmelidir. Öğelerde, başvurunun özgün öğe belirtimini içeren adlı OriginalItemSpecyeni bir meta veri parçasına ek olarak, giriş öğelerindeki tüm meta veriler geçirilmelidir.

Performans kısayolları

Hata ayıklamayı başlatmak için (F5 anahtarını seçerek veya menü çubuğunda Hata AyıklamaYı Başlat Hata Ayıklama'yı> seçerek) veya projenizi derlemek için (örneğin Derleme Çözümü) Visual Studio IDE'yi kullanırsanız, >derleme işlemi performansı artırmak için hızlı bir güncelleştirme denetimi kullanır. Özelleştirilmiş derlemelerin sırayla derlenen dosyalar oluşturduğu bazı durumlarda, hızlı güncelleştirme denetimi değiştirilen dosyaları doğru şekilde tanımlamaz. Daha kapsamlı güncelleştirme denetimleri gerektiren projeler, ortam değişkenini DISABLEFASTUPTODATECHECK=1ayarlayarak hızlı denetimi kapatabilir. Alternatif olarak, projeler bunu projede veya projenin içeri aktarmış olduğu bir dosyada MSBuild özelliği olarak ayarlayabilir.