Uyarı CA1417: P/Invoke için dize parametresinde OutAttribute

.NET kod çözümleyici kuralı CA1417 varsayılan olarak .NET 5'te başlayarak etkindir. Bir parametrenin değer tarafından geçirildiği ve ile işaretlendiği tüm Platform Invoke (P/Invoke) yöntemi tanımları için bir String derleme uyarısı oluşturur.OutAttribute

Açıklama değiştirildi

.NET 5'den başlayarak .NET SDK'sı .NET kaynak kodu çözümleyicilerini içerir. Ca1417 de dahil olmak üzere bu kuralların bazıları varsayılan olarak etkindir. Projeniz bu kuralı ihlal eden bir kod içeriyorsa ve uyarıları hata olarak değerlendirecek şekilde yapılandırılmışsa, bu değişiklik derlemenizi bozabilir.

Kural CA1417, bir String parametrenin özniteliğiyle işaretlendiği ve değere göre OutAttribute geçirildiği P/Invoke yöntemi tanımlarını işaretler. Örneğin:

[DllImport("MyLibrary")]
private static extern void PIMethod([Out] string s);

.NET çalışma zamanı, bir programdaki her benzersiz değişmez dizeye tek bir başvuru içeren, stajyer havuzu olarak adlandırılan bir tablo tutar. ile OutAttribute işaretlenmiş bir interned dize bir P/Invoke yöntemine değer tarafından geçirilirse, çalışma zamanı dengesiz hale getirilebilir. Dize stajyeri hakkında daha fazla bilgi için, için String.Intern(String)açıklamalarına bakın.

Sürüm kullanıma sunulmuştur

5.0

  • Değiştirilen dize verilerini çağırana yeniden hazırlamanız gerekiyorsa, bunun yerine dizeyi başvuruya göre geçirin.

    [DllImport("MyLibrary")]
    private static extern void PIMethod(out string s);
    
  • Değiştirilen dize verilerini çağırana geri hazırlamanız gerekmiyorsa, öğesini kaldırmanız yeterlidir OutAttribute.

    [DllImport("MyLibrary")]
    private static extern void PIMethod(string s);
    

    Daha fazla bilgi için bkz . CA1417.

  • Kod analizini tamamen devre dışı bırakmak için proje dosyanızda olarak false ayarlayınEnableNETAnalyzers. Daha fazla bilgi için bkz . EnableNETAnalyzers.

Etkilenen API’ler

API analizi aracılığıyla algılanamaz.