C#/WinRT Sürüm 0.8 ve . NET5 RC2 Sürümü Angela Zhang

  • History |
  • |
  • 0 Yorum

C#/WinRT'nin en son sürümüyle paylaşmak için birkaç önemli güncellememiz var. Bu sürüm, tüketim senaryoları için eksiksiz bir özelliktir, bu da WinRT API'lerini çağırmak için oluşturulan Windows SDK projeksiyonlarımızı kullanmak için tüm özelliklerin artık son formlarında olduğu anlamına gelir. C#/WinRT'nin .NET Native ve .NET Core 3 ile eşliğe sahip olmasını bekliyoruz ve müşterilerin 'ye güncellemelerini teşvik ediyoruz. NET5 RC2 ve Kasım ayındaki son sürümümüzden önce bize geri bildirimde bulunun.

İlk olarak, en son CsWinRT NuGet paketi ile bileşen yazarları için takım geliştirmeleri ekledik. Bu geliştirmeler, bileşen yazarlarının NuGet paketine başvurarak ve birkaç proje özelliği belirterek bir C# projeksiyonu oluşturmasını kolaylaştırır. Bu işlevselliği göstermek için, CsWinRT repo'ya bileşen yazarları için uç uça bir örnek ekledik.

İkinci olarak, 'de gönderim yapan çalışma zamanı güncellemelerini yaptık. NET5 RC2 sürümü. Çalışma zamanı ve oluşturulan projeksiyon kodu artık birçok . Gelişmiş performans için İşlev İşaretçileri ve doğal C#stili yayınlar uygulamak için IDynamicInterfaceCastable (IDIC) gibi NET5 özellikleri. İkincisi, InvalidCastExceptions ile ilgili birkaç hatayı düzeltmemize izin verdi. Bu en son C#/WinRT güncelleştirmeleri için Windows SDK projeksiyonlarına entegre edilmiştir. NET5 RC2. Bu son güncelleştirmeleri kullanmak için, Visual Studio'nun en yeni sürümü olan 16.8 Preview 4 sürümünü yükleyin. NET5 RC2 SDK.


C#/WinRT Takım Deneyimi

Geliştirilmiş C#/WinRT Araç

Bileşen yazarları için C#/WinRT takımlama deneyimini geliştirdik. Bileşen yazarları artık CsWinRT NuGet paketine bir başvuru ekleyebilir ve kolayca bir projeksiyon oluşturmak için birkaç proje özelliği belirtebilir ve daha sonra bir . NET5 uygulaması.

Aşağıdaki C# proje dosyası kodu snippet'i, bu güncelleştirilmiş aracın çözümünüzdeki "SimpleMathComponent" adlı bir C++/WinRT bileşen projesiyle nasıl kullanılacağını gösterir. Projeksiyonu C#/WinRT kullanarak oluşturmak için ihtiyacınız olan tek şey bileşen projesine ve hangi ad alanlarının yansıtılabileceğini belirten CsWinRTIncludes özelliğine bir proje başvurusudur.

<ItemGroup>
  <ProjectReference Includes = “..\SimpleMathComponent\SimpleMathComponent.vcxproj”>
</ItemGroup>

<PropertyGroup>
  <CSWinRTIncludes>SimpleMathComponent</CSWinRTIncludes>
</PropertyGroup>

CsWinRT NuGet paketine bir başvuru ile birlikte bu özelliklere sahip bir proje oluşturmak, C# birlikte çalışma kodunuzu ve derlemenizi oluşturarak perde arkasındaki cswinrt.exe aracını çağırır. Oluşturulan derleme daha sonra bir içinde kullanılabilir. NET5 uygulaması.

Ayrıca, C#/WinRT davranışını özelleştirmek için projeksiyonu oluşturmaktan hangi ad alanlarının dışlanabileceği ve oluşturulan proje kaynak dosyalarının konumu gibi ek proje özellikleri de belirtebilirsiniz. Bu güncelleştirilmiş araç hakkında daha fazla ayrıntı için, bu belgeyebakın.

Bileşen Yazar Örneği

Bileşen yazarları için uç sonu örneği depomuza ekledik. Bu örnek, temel matematik işlemleriyle "SimpleMathComponent" kullanarak yukarıdaki örnek kod snippet'ini genişletir. Bileşen yazarlarına nasıl oluşturulacaklarını gösterir. C++/WinRT bileşeninden NET5 projeksiyonu ve NuGet paketi ve bir bileşeninden NuGet paketinin nasıl tüketilir. NET5 konsol uygulaması. Bu örnekteki projeksiyon C# proje dosyası.exe yeni takım desteğiyle cswinrt'in nasıl çağrılılacağını gösterir.

Bu örneği kullanmak için, belgelerimizdeki ilişkili izlenecek yoldan takip edebilirsiniz.


C#/WinRT Çalışma Zamanı Güncelleştirmeleri

Yeni Özellikler

Yakın zamanda IDynamicInterfaceCastable (IDIC) için özellik çalışmasını tamamladık. NET5 projeksiyonları. Bu, artık öngörülen arabirimler için doğal C# stili yayınlar kullanmayı mümkün kılar. IDIC ile, erken bağdaştırıcıların karşıdan yüklenebildiği birkaç InvalidCastException hatasını da düzeltebildik.

'deki yeni IDIC işlevini kullanan bir örnek aşağıda verilmiştir. NET5 C# projesi:

var agileObject = (IAgileObject)(object)new 
Windows.Foundation.WwwFormUrlDecoder("https://www.microsoft.com");

Bu örnekte, Windows Çalışma Zamanı API'lerinden Windows.Foundation.WWWFormUrlDecoder türünde bir nesneyi C#/WinRT tarafından öngörülen bir tür olan IAgileObject'e atıyoruz. IDIC ile artık bu dökümü yapabiliyoruz, ancak daha önce yöntem nesnesini açıkça kullanmanız gerekir. As().

C#/WinRT artık çalışma zamanında ve oluşturduğu projeksiyon kodunda işlev işaretçileri de kullanarak performansın artmasına neden olur.


Son Değişiklikler

için en son C#/ WinRT projeksiyonlarımızla birkaç son değişiklik var. Yukarıda belirtilen bazı güncellemeler de dahil olmak üzere NET5 RC2 sürümü. CsWinRT repo'suna bilinen son değişikliklerin listesi eklendi.

için ana değişiklikler. NET5 RC2 aşağıdakileri içerir:

  • SDK ve çalışma zamanı derlemesine güçlü ad imzalama ekledik, winrt.runtime.dll. Bu, Winrt.runtime.dll önceki sürümleriyle oluşturulan derlemelerin Windows SDK ve WinUI dahil olmak üzere uyumlu olmadığı anlamına gelir. Tüm bağımlılıkların en son olarak güncelleştirilmesi gerekir. NET5 RC2 sürümleri.
  • Bazı WinRT türleri yansıtıldığında varsayılan değerlerde farklılıklara sahip olabilir ve bu da varsayılan değerlere güveniyorsa sorunları artırabilir. Örneğin, Foundation.DateTime C# içinde System.DateTimeOffset'e yansıtıldı ve bu türler farklı varsayılan değerlere sahip.
  • Olay erişimcisi dönüş türü Runtime.InteropServices.WindowsRuntime.EventRegistrationToken 'den voidolarak değiştirildi. Artık System.Runtime.InteropServices.WindowsRuntime ad alanını ' den kaldırıldığı için projelendireceğiz. NET5.
  • Öngörülen XAML sınıfları hala uygulama başlangıç yolunda açık bir kayıt gerektirir. Bu, RTM sürümünde düzeltilecektir. Eklemeniz gereken koda bir örnek aşağıda verilmiştir:
public App() {
   WinRT.ComWrappersSupport.RegisterProjectionAssembly(typeof(App).Assembly);
}


Bilinen Sorunlar

C#/WinRT'nin bu sürümüyle dikkat edilmesi gereken bilinen sorunlar şunlardır:

  • ReadyToRun , uygulamasını kullanan uygulamalar için desteklenmez. NET5 Windows 10 TFM. Bu uygulamalar en son . Düzeltmeyi almak için RTM şubesinden NET5 SDK. Daha fazla ayrıntı bu konudabulunabilir.
  • . NET5 RC2, WinUI 3 Preview 2 ile uyumlu değildir. Bu, WinUI 3 Preview 3'te çözülecektir.