WebHU - Programozási kérdések és válaszok

A Windows szó használata a saját névtér részeként a Metro stílusú alkalmazásokban

Ha megpróbálod a Windows-t a saját névtered részeként használni a Metro-stílusú alkalmazásokban (pl. MyCompany.Windows), akkor úgy tűnik, hogy kidobja a fordító(ka)t, mert nem a Windows, hanem a te névtered alatt kezdenek WinRT cuccokat keresni.*.

Például, ha létrehoz egy üres Windows Metro stílusú alkalmazást App1 néven, és átnevezi az App1 névteret App1.Windows névre, és megpróbálja lefordítani, hibaüzenetet fog kapni:

A típus- vagy névtérnév „UI” nem létezik az „App1.Windows” névtérben (hiányzik egy összeállítási hivatkozás?) F:\temp\App1\App1\obj\Debug\App.g.i.cs

a generált fájl teteje így néz ki:

namespace App1.Windows
{
#if !DISABLE_XAML_GENERATED_MAIN
    public static class Program
    {
        [System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.Windows.UI.Xaml.Build.Tasks"," 4.0.0.0")]
        [System.Diagnostics.DebuggerNonUserCodeAttribute()]
        static void Main(string[] args)
        {
            Application.Start((p) => new App());
        }
    }
#endif

    partial class App : Windows.UI.Xaml.Application

és a probléma az, hogy a fordító elkezdi keresni a Windows.UI-t az App1.Windows alatt.

Ez most nem újdonság, és ha korábban elnevezné a névterét App1.System, valószínűleg valamikor hasonló bajba kerülne. A probléma az, hogy nagyon sok WPF/Silverlight/Windows Phone kód MyCompany.Windows.Xyz névtereket használ, és valószínűleg érzékeny az ilyen jellegű problémákra.

Van valami útmutatás a Microsofttól (úgy tűnik, nem találom), hogy mit kell tenni ezekkel a névterekkel? Vagy esetleg vannak tervek ennek megoldására a jövőbeli verziókban? Vagy csak nekem hiányzik valami?


  • ez egy automatikusan generált kód a fordítótól. Nincs rá kontrollom. 02.07.2012
  • akkor egyelőre ne használj Windowst. Küldje be a hibát a connect.microsoft.com címre, és talán az RTM-ben meglesz a javítás 02.07.2012
  • Igen, de ez valószínűleg nem hiba. Ugyanebbe a problémába kerülne a .NET bármely verziójában, ha a legfelső szintű névteret (például a rendszert) használja a saját névterében. Csak annyi, hogy sokan WPF/SL/WP-ben használták a Windowst 02.07.2012
  • az adatkészlet-generátorokban vagy az XSD.exe-ben az MS használja a global::. Talán most a konvenciót választják a konfigurációs megközelítés helyett 02.07.2012

Válaszok:


1

Megnéztem ezt a problémát, és a global::-t kellene használnunk a generált kódban. Ezt kijavítottuk, és a Visual Studio következő kiadásában lesz elérhető.

03.07.2012

2

Ez egy ismert viselkedés a C# nyelvi specifikációban. Alapvetően minden alkalommal, amikor egy névtér megjelenik egy "using" záradékban, a rendszer a névtér összes elemét úgy kezeli, mintha azok a használó névtér részei lennének. Két megoldás létezik: Távolítsa el a „Windows” nevet a belső csomópontokból, vagy távolítsa el a „using” direktívát.

Ez sajnos nem winrt probléma, a tiszta CLR alkalmazásokkal is előfordulhat ugyanez.

02.07.2012
  • Kösz. Igen, a kérdésben kifejtettem, hogy ez nem újdonság és nem a WinRT-re jellemző, csak arról van szó, hogy korábban nem volt felső szintű Windows névtér, és általános volt, hogy a WPF/SL/WP7 könyvtárak MyCompany.Windows stílusú névtereket használtak. Most pedig át kell nevezni őket, hogy elkerüljük a bajokat. Ó, azt hiszem, nincs más megoldás. 03.07.2012
  • Ez sajnálatos. FWIW, ugyanez a problémám volt egy csomó belső kóddal, amelyet át kellett írnom, amikor létrehoztuk az SDK-ban lévő Windows.winmd fájlt – nem volt szórakoztató vele foglalkozni. 03.07.2012
  • Új anyagok

    A rádiógomb ellenőrzött eseményének használata a jQueryben
    Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

    Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
    Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

    Miért érdemes elkezdeni a kódolást 2023-ban?
    01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

    🎙 Random Noise #2  – Örökbefogadás és hit
    az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

    A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
    A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

    5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
    Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

    Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
    A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..