Megosztás a következőn keresztül:


Bemeneteket meghatározó C#-fordító beállításai

Az alábbi beállítások szabályozzák a fordító bemeneteit. Az új MSBuild szintaxis félkövér formátumban jelenik meg. A régebbi csc.exe szintaxis látható a code style.

  • Hivatkozások / -reference vagy -references: Hivatkozzon a megadott szerelvényfájlból vagy fájlokból származó metaadatokra.
  • Modul hozzáadása / -addmodule: Modul hozzáadása (a szerelvényhez target:module létrehozva).)
  • EmbedInteropTypes / -link: Metaadatok beágyazása a megadott interop szerelvényfájlokból.

Hivatkozások

A Hivatkozások beállítás hatására a fordító a megadott fájlban lévő nyilvános típusú adatokat importálja az aktuális projektbe, így a megadott szerelvényfájlok metaadataira hivatkozhat.

<Reference Include="filename" />

filename a szerelvényjegyzéket tartalmazó fájl neve. Egynél több fájl importálásához minden fájlhoz adjon meg egy külön referenciaelemet . Az aliasokat a Referencia elem gyermekelemeként definiálhatja:

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

Az előző példában az érvényes C# azonosító egy gyökérnévteret jelöl, LS amely a szerelvény filename.dllösszes névterét tartalmazza. Az importált fájloknak tartalmazniuk kell egy jegyzékfájlt. Az AdditionalLibPaths használatával megadhatja azt a könyvtárat, amelyben egy vagy több szerelvényhivatkozás található. Az AdditionalLibPaths témakör azokat a könyvtárakat is ismerteti, amelyekben a fordító szerelvényeket keres. Ahhoz, hogy a fordító felismerjen egy típust egy szerelvényben, és ne egy modulban, meg kell oldania a típust, amelyet a típus egy példányának definiálásával tehet meg. A fordító szerelvényében más módokon is fel lehet oldani a típusneveket: ha például egy szerelvény egy típusától örököl, akkor a fordító felismeri a típusnevet. Néha szükség van arra, hogy ugyanazon összetevő két különböző verziójára hivatkozzon egy szerelvényen belül. Ehhez használja az Aliasok elemet az egyes fájlok Hivatkozás elemén a két fájl megkülönböztetéséhez. Ez az alias lesz használva az összetevő nevének minősítőjeként, és feloldja az összetevőt az egyik fájlban.

Megjegyzés:

A Visual Studióban használja a Hivatkozás hozzáadása parancsot. További információ : Útmutató: Hivatkozások hozzáadása vagy eltávolítása a Referenciakezelő használatával.

Modulok hozzáadása

Ez a beállítás hozzáad egy modult, amelyet a <OutputType>module</OutputType> kapcsolóval hoztak létre az aktuális fordításhoz:

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

Hol filevannak file2 a metaadatokat tartalmazó kimeneti fájlok. A fájl nem tartalmazhat szerelvényjegyzéket. Több fájl importálásához különítse el a fájlneveket vesszővel vagy pontosvesszővel. Az AddModules szolgáltatással hozzáadott összes modulnak ugyanabban a könyvtárban kell lennie, mint a kimeneti fájl futásidejében. Ez azt is jelentheti, hogy fordításkor bármely könyvtárban megadhat egy modult, de a modulnak futásidőben az alkalmazáskönyvtárban kell lennie. Ha a modul futásidőben nem szerepel az alkalmazáskönyvtárban, egy TypeLoadException. file nem tartalmazhat szerelvényt. Ha például a kimeneti fájl a modulOutputType beállításával lett létrehozva, a metaadatai az AddModules használatával importálhatók.

Ha a kimeneti fájl a modultól eltérő OutputType beállítással lett létrehozva, a metaadatai nem importálhatók az AddModules használatával, de a Hivatkozások beállítással importálhatók.

EmbedInteropTypes

Emiatt a fordító elérhetővé teszi a COM-típusadatokat a megadott szerelvényekben az éppen összeállított projekt számára.

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

Hol file1;file2;file3 található a szerelvényfájlnevek pontosvesszővel tagolt listája. Ha a fájlnév szóközt tartalmaz, a nevet idézőjelek közé kell foglalnia. Az EmbedInteropTypes lehetőség lehetővé teszi egy beágyazott típusinformációval rendelkező alkalmazás üzembe helyezését. Az alkalmazás ezután olyan futtatókörnyezeti szerelvényben is használhat típusokat, amelyek a beágyazott típusinformációkat implementálják anélkül, hogy hivatkozni kellene a futtatókörnyezet-szerelvényre. Ha a futtatókörnyezet-szerelvény különböző verzióit közzéteszik, a beágyazott típusinformációkat tartalmazó alkalmazás újrafordítás nélkül együttműködhet a különböző verziókkal. Példa: Útmutató: Típusok beágyazása felügyelt szerelvényekből.

Az EmbedInteropTypes lehetőség használata különösen hasznos a COM-interop használata esetén. COM-típusokat ágyazhat be, így az alkalmazásnak már nincs szüksége elsődleges interop szerelvényre (PIA) a célszámítógépen. Az EmbedInteropTypes beállítás arra utasítja a fordítót, hogy ágyazza be a COM-típusadatokat a hivatkozott interop szerelvényből az eredményül kapott lefordított kódba. A COM-típust a CLSID (GUID) érték azonosítja. Ennek eredményeképpen az alkalmazás futtatható olyan célszámítógépen, amely ugyanazokat a COM-típusokat telepítette ugyanazokkal a CLSID-értékekkel. A Microsoft Office-t automatizáló alkalmazások jó példa erre. Mivel az Office-hoz hasonló alkalmazások általában ugyanazt a CLSID-értéket tartják meg különböző verziókban, az alkalmazás használhatja a hivatkozott COM-típusokat mindaddig, amíg a .NET-keretrendszer 4- vagy újabb verziója telepítve van a célszámítógépre, és az alkalmazás a hivatkozott COM-típusokban szereplő metódusokat, tulajdonságokat vagy eseményeket használja. Az EmbedInteropTypes beállítás csak illesztőket, struktúrákat és meghatalmazottakat ágyaz be. A COM-osztályok beágyazása nem támogatott.

Megjegyzés:

Ha beágyazott COM-típusú példányt hoz létre a kódban, a példányt a megfelelő felületen kell létrehoznia. Ha egy beágyazott COM-típuspéldányt próbál létrehozni a CoClass használatával, az hibát okoz.

A Hivatkozások fordítóhoz hasonlóan az EmbedInteropTypes fordítóprogram a Csc.rsp válaszfájlt használja, amely a gyakran használt .NET-szerelvényekre hivatkozik. Ha nem szeretné, hogy a fordító a Csc.rsp fájlt használja, használja a NoConfig fordítót.

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

Az olyan általános paraméterrel rendelkező típusok, amelyek típusa egy interop szerelvényből van beágyazva, nem használhatók, ha ez a típus külső szerelvényből származik. Ez a korlátozás nem vonatkozik a felületekre. Vegyük például a Range szerelvényben Microsoft.Office.Interop.Excel definiált felületet. Ha egy kódtár beágyazza az illesztőtípusokat a Microsoft.Office.Interop.Excel szerelvényből, és olyan metódust tesz elérhetővé, amely egy olyan általános típust ad vissza, amelynek a típusa az Range interfész, a metódusnak egy általános felületet kell visszaadnia, ahogyan az a következő kódpéldában látható.

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;
    }
}

Az alábbi példában az ügyfélkód meghívhatja azt a metódust, amely hiba nélkül adja vissza az IList általános felületet.

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();
    }
}