Girişleri belirten C# Derleyici Seçenekleri

Aşağıdaki seçenekler derleyici girişlerini denetler. Yeni MSBuild söz dizimi Kalın olarak gösterilir. Eski csc.exe söz dizimi içinde code stylegösterilir.

  • Başvurular / -reference veya -references: Belirtilen derleme dosyasından veya dosyalarından meta verilerine başvurur.
  • AddModules-addmodule / : Bir modül ekleyin (bu derlemeye ile target:module oluşturulur.)
  • EmbedInteropTypes / -link: Belirtilen birlikte çalışma derleme dosyalarından meta verileri ekleyin.

Başvurular

Başvurular seçeneği, derleyicinin belirtilen dosyadaki genel tür bilgilerini geçerli projeye içeri aktarmasına neden olur ve belirtilen derleme dosyalarındaki meta verilerine başvurmanızı sağlar.

<Reference Include="filename" />

filename , derleme bildirimi içeren bir dosyanın adıdır. Birden fazla dosyayı içeri aktarmak için her dosya için ayrı bir Başvuru öğesi ekleyin. Başvuru öğesinin alt öğesi olarak bir diğer ad tanımlayabilirsiniz:

<Reference Include="filename.dll">
  <Aliases>LS</Aliases>
</Reference>

Önceki örnekte, LS derleme filename.dll tüm ad alanlarını içerecek bir kök ad alanını temsil eden geçerli C# tanımlayıcısıdır. İçeri aktardığınız dosyalar bir bildirim içermelidir. Derleme başvurularınızdan birinin veya daha fazlasının bulunduğu dizini belirtmek için AdditionalLibPaths'i kullanın. AdditionalLibPaths konusu, derleyicinin derlemeleri araydığı dizinleri de açıklar. Derleyicinin bir modülde değil, derlemedeki bir türü tanıması için türü çözümlemeye zorlanması gerekir; bunu türün bir örneğini tanımlayarak yapabilirsiniz. Derleyici için bir derlemedeki tür adlarını çözümlemenin başka yolları da vardır: örneğin, bir derlemedeki bir türden devralırsanız, tür adı derleyici tarafından tanınır. Bazen bir derleme içinden aynı bileşenin iki farklı sürümüne başvurmak gerekir. Bunu yapmak için, her dosyanın References öğesindeki Aliases öğesini kullanarak iki dosyayı birbirinden ayırt edin. Bu diğer ad, bileşen adı için niteleyici olarak kullanılır ve dosyalardan birinde bileşene çözümlenir.

Not

Visual Studio'da Başvuru Ekle komutunu kullanın. Daha fazla bilgi için bkz . Nasıl yapılır: Başvuru Yöneticisi'ni Kullanarak Başvuru Ekleme veya Kaldırma.

AddModules

Bu seçenek, anahtarıyla <TargetType>module</TargetType> oluşturulmuş bir modülü geçerli derlemeye ekler:

<AddModule Include=file1 />
<AddModule Include=file2 />

burada file, file2 meta veri içeren çıkış dosyalarıdır. Dosya bir derleme bildirimi içeremez. Birden fazla dosyayı içeri aktarmak için dosya adlarını virgül veya noktalı virgülle ayırın. AddModules ile eklenen tüm modüllerin çalışma zamanında çıkış dosyasıyla aynı dizinde olması gerekir. Başka bir ifadeyle, derleme zamanında herhangi bir dizinde bir modül belirtebilirsiniz, ancak modülün çalışma zamanında uygulama dizininde olması gerekir. Modül çalışma zamanında uygulama dizininde değilse bir TypeLoadExceptionalırsınız. file derleme içeremez. Örneğin, çıkış dosyası modülün TargetType seçeneğiyle oluşturulduysa meta verileri AddModules ile içeri aktarılabilir.

Çıkış dosyası modül dışında bir TargetType seçeneğiyle oluşturulduysa meta verileri AddModules ile içeri aktarılamaz ancak Başvurular seçeneğiyle içeri aktarılabilir.

EmbedInteropTypes

Derleyicinin, şu anda derlediğiniz projede belirtilen derlemelerdeki COM tür bilgilerini kullanılabilir hale getirmesine neden olur.

<References>
  <EmbedInteropTypes>file1;file2;file3</EmbedInteropTypes>
</References>

Burada file1;file2;file3 , derleme dosyası adlarının noktalı virgülle ayrılmış listesidir. Dosya adında boşluk varsa, adı tırnak içine alın. EmbedInteropTypes seçeneği, ekli tür bilgileri içeren bir uygulama dağıtmanıza olanak tanır. Uygulama daha sonra, çalışma zamanı derlemesine başvuru gerektirmeden katıştırılmış tür bilgilerini uygulayan bir çalışma zamanı derlemesindeki türleri kullanabilir. Çalışma zamanı derlemesinin çeşitli sürümleri yayımlanırsa, katıştırılmış tür bilgilerini içeren uygulama, yeniden derlenmek zorunda kalmadan çeşitli sürümlerle çalışabilir. Örnek için bkz . İzlenecek Yol: Yönetilen Derlemelerden Türleri Ekleme.

EmbedInteropTypes seçeneğinin kullanılması özellikle COM birlikte çalışmasıyla çalışırken kullanışlıdır. Uygulamanızın artık hedef bilgisayarda birincil birlikte çalışma derlemesi (PIA) gerektirmemesi için COM türlerini ekleyebilirsiniz. EmbedInteropTypes seçeneği, derleyiciye başvuruda bulunılan birlikte çalışma derlemesindeki COM türü bilgilerini sonuçta elde edilen derlenmiş koda eklemesini sağlar. COM türü CLSID (GUID) değeriyle tanımlanır. Sonuç olarak, uygulamanız aynı CLSID değerlerine sahip aynı COM türlerini yüklemiş bir hedef bilgisayarda çalıştırılabilir. Microsoft Office'i otomatik hale getiren uygulamalar iyi bir örnek olabilir. Office gibi uygulamalar genellikle farklı sürümlerde aynı CLSID değerini tuttuğundan, uygulamanız hedef bilgisayarda .NET Framework 4 veya üzeri yüklü olduğu ve uygulamanız başvurulan COM türlerine dahil edilen yöntemleri, özellikleri veya olayları kullandığı sürece başvurulan COM türlerini kullanabilir. EmbedInteropTypes seçeneği yalnızca arabirimleri, yapıları ve temsilcileri ekler. COM sınıflarının katıştırılması desteklenmez.

Not

Kodunuzda eklenmiş bir COM türünün örneğini oluşturduğunuzda, uygun arabirimi kullanarak örneği oluşturmanız gerekir. CoClass kullanarak katıştırılmış com türünün bir örneğini oluşturmaya çalışmak bir hataya neden olur.

References derleyici seçeneği gibi EmbedInteropTypes derleyici seçeneği de sık kullanılan .NET derlemelerine başvuran Csc.rsp yanıt dosyasını kullanır. Derleyicinin Csc.rsp dosyasını kullanmasını istemiyorsanız NoConfig derleyicisi seçeneğini kullanın.

// The following code causes an error if ISampleInterface is an embedded interop type.
ISampleInterface<SampleType> sample;

Türü birlikte çalışma derlemesinden eklenmiş olan genel parametreye sahip türler, bu tür bir dış derlemeden geliyorsa kullanılamaz. Bu kısıtlama arabirimler için geçerli değildir. Örneğin, derlemede RangeMicrosoft.Office.Interop.Excel tanımlanan arabirimi göz önünde bulundurun. Kitaplık birlikte çalışma türlerini derlemeden Microsoft.Office.Interop.Excel eklerse ve türü arabirim olan bir parametresi Range olan genel bir tür döndüren bir yöntemi kullanıma sunarsa, bu yöntemin aşağıdaki kod örneğinde gösterildiği gibi genel bir arabirim döndürmesi gerekir.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Office.Interop.Excel;

public class Utility
{
    // The following code causes an error when called by a client assembly.
    public List<Range> GetRange1()
    {
        return null;
    }

    // The following code is valid for calls from a client assembly.
    public IList<Range> GetRange2()
    {
        return null;
    }
}

Aşağıdaki örnekte istemci kodu, genel arabirimi hatasız döndüren IList yöntemini çağırabilir.

public class Client
{
    public void Main()
    {
        Utility util = new Utility();

        // The following code causes an error.
        List<Range> rangeList1 = util.GetRange1();

        // The following code is valid.
        List<Range> rangeList2 = (List<Range>)util.GetRange2();
    }
}