C# koduma bir PowerShell komut dosyası ekledim ve C# kullanarak çağırıyorum. komut ne yaparC# ifadesinde dinamik PSObject Özellikleri çağrısı RuntimeBinderException
bazı grup ve Active Directory kendi üyelerini alır ve bir PSObject olarak benim C# kodu onları döndüren olduğunu. Bu nesne, grubun içerdiği üyelerin bir Array içeren "Üye" adlı bir özelliğe sahiptir. Bu üyelerin her biri PowerShell ile eklediğim EmailAddress, Name vb. Gibi diğer özelliklere de sahiptir ve ben de betiği test ettim, amaçlanan şekilde çalışıyor. İşte
Ben dinamik bir değişken kullanarak grup üyelerini elde etmeye çalışmak C# benim kodudur:GetGroupMembers(PSObject groupObject) {
// These are the group members, an object Array with 4 objects gets returned
dynamic members = groupObject.Properties["Member"].Value;
foreach (var member in members) {
string objectClass = member.ObjectClass;
ADObject memberObject;
switch (objectClass) {
case "user":
// This is where the exception gets thrown, since the "EmailAddress" value is null
string email = member.Properties["EmailAddress"].Value.ToString();
[...]
Buradaki sorun ayıklama yaparken, ben mülkiyet dinamik orada olduğunu görüyoruz aslında olmasıdır üye değişken, ancak foreach döngüsü sırasında üye değişkeninde kaldırılır. Here's a screenshot I made during debugging, which shows clearly that the property is available in the members variable.
Ben iletiyi içeren bir RuntimeBinderException olduğunu olsun istisna (Kapatma, CallSite, Nesne, String) System.Dynamic.UpdateDelegates.UpdateAndExecute2 de CallSite.Target de "boş referans bağlayıcı çalışma zamanını gerçekleştirilemez" [T0, T1, TRet] (CallSite sitesi, T0 arg0, T1 arg1)
Belki de hata açıktır, ancak yanlış yaptığımı anlayamıyorum. Herhangi bir yardımı gerçekten takdir ederdim. Teşekkür ederim!
Ekran görüntüleriniz sadece mülkiyet varolduğunu gösterir: Kimsenin hala çözüm arıyorsa ben onu çözdüm bu nasıl olduğunu hiç
dynamic
türü kullanmak vermedi. Mülkün gerçek değere sahip olmadığına dair hiçbir kanıt yoktur. Tam olarak özel durumun nerede olduğunu öğrenmek için komutunuzu bölmeniz gerekir: 'PSPropertyInfo property = member.Properties [" EmailAddress "]; nesne değeri = property.Value; string email = değer.ToString(); '. – PetSerAl@PetSerAl Cevabınız için teşekkürler. Sorun şu ki; member.Properties ["EmailAddress"] '' 'null'' dır ve foreach döngüsünden önce, en azından varlığın (ekran görüntüsüne dayalı olarak belirttiğiniz gibi) olduğunu görebilirim ve bu garip bir şey, Bir şekilde kaybolur ... Sizden belirtilen ifadeyi eklerken bir RuntimeBinderException alıyorum: 'PSPropertyInfo property = member.Properties [" EmailAddress "]; – lleshiart
'string email = üye.EmailAddress; – PetSerAl