SORU
8 ŞUBAT 2012, ÇARŞAMBA


Kale DynamicProxy - proxy GTP bir GTR olarak kullanılan karıştığı oluşturma Hatası

TAMAM, şimdi gerçekten kafam karıştı.

Aslında, posterler göre, Kale sürümü ile ilgili bir sorun olduğu this problem vardı.DynamicProxy en son Gergedan içine İLMerged.Alay kütüphane. Bu konuda çeşitli makamlara göre, son Kale olarak sabit olmuştur, ama bu kütüphane yeni bir Gergedan içine vermiş değil.Alay ediyor. Çoğu insan diyor "sadece Gergedan kaynak ve en son Kale indir ve kendi sürümünü oluşturmak".

Yani, tam olarak bunu yaptım; Ayende. GitHub Rhino ana kaynak bir POSTA aldım, açtı, ve inşa ettim. Sonra, iyi bir TDDer gibi, yaptığım değişiklikler işe yaradı emin olmak için bir birim test son Kalesi Çekirdek içine DynamicProxy, bazı önemli başvuran değişiklikleri gerektiren kıvrımlar, çünkü ben yarattı

    [Test]
    public void MockOfInterfaceMethodWithInterfaceGTR()
    {
        var mock = mocks.DynamicMock<ITestRestrictedInterface>();
        Assert.NotNull(mock);
        Expect.Call(mock.TestMethod(new Object2())).IgnoreArguments().Return(5);
        mocks.ReplayAll();
        Assert.AreEqual(5, mock.TestMethod(new Object2()));
    }

...

internal interface ITestGenericInterface<TRest> where TRest:IObject1
{
    int TestMethod<T>(T input) where T : TRest;
}

internal interface ITestRestrictedInterface:ITestGenericInterface<IObject2> { }

internal interface IObject1 { }
internal interface IObject2:IObject1 { }

internal class Object2:IObject2 { } 

Sonuç, en son ne zaman piyasaya Gergedan ile kendi üretim benim kod çalıştırmak? Aşağıdaki ileti hatası:

Sistem.Durumuna : Yöntem 'TestMethod' tür 'İTestRestrictedİnterfaceProxy83ad369cdf41472c857f61561d434436' Meclis 'DynamicProxyGenAssembly2,=0.0.0.0, Culture=neutral Sürüm, PublicKeyToken=null' örtülü bir arabirim yöntemi uygulamak için çalıştı zayıf tip kısıtlamalar parametre.

Anlaşıldı ...ancak, ve Gergedan bir Fikstür içine bu test yapıştırın.Alay ediyor.Testler, başvurulan kütüphaneler için herhangi bir değişiklik yapmadan, proje, test başarılı olur. İndirilen kaynak değişiklikleri sıfır yaptım. Test yöntemi ve ilgili arabirimleri değişiklikler SIFIR iki tarafında/nesneler yaptım. Yeni bir Gergedan yaptım.Alay (IL-birleştirme Kale libs olmadan) DLL ve Kale libs ile üretim çözüm, yeniden koştu tekrar test kopyalanan ve hala aynı ileti ile başarısız olur.

Güvenlik programı.

CEVAP
13 ŞUBAT 2013, ÇARŞAMBA


Kale uzman ne de derleyici bir guru değilim, ama sorun RhinoMocks içinde gizli olduğunu birazcık sihir olduğuna inanıyorum.Montaj testleri:

https://github.com/ayende/rhino-mocks/blob/master/Rhino.Mocks.Tests/TestInfo.cs

using System.Runtime.CompilerServices;
using Rhino.Mocks;

[assembly: InternalsVisibleTo(RhinoMocks.StrongName)]

Ve bütünlüğü uğruna, RhinoMocks.StrongName olarak tanımlanır:

/// <summary>
/// Used for [assembly: InternalsVisibleTo(RhinoMocks.StrongName)]
/// Used for [assembly: InternalsVisibleTo(RhinoMocks.NormalName)]
/// </summary>
public static class RhinoMocks
{
    /// <summary>
    /// Strong name for the Dynamic Proxy assemblies. Used for InternalsVisibleTo specification.
    /// </summary>
    public const string StrongName =
        "DynamicProxyGenAssembly2, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7";

    /// <summary>
    /// Normal name for dynamic proxy assemblies. Used for InternalsVisibleTo specification.
    /// </summary>
    public const string NormalName = "DynamicProxyGenAssembly2";

    /// <summary>
    /// Logs all method calls for methods
    /// </summary>
    public static IExpectationLogger Logger = new NullLogger();
}

Adedi, which has this issue documented kullanırken benzer bir sorun görmedim.

Sorun dinamik Kale ihtiyaçları DynamicProxy yeni bir tür elde ama hangi arayüz görmek görünürlük yokderleme için. Basitçe test kitaplığına DynamicProxyGenAssembly2 için İnternalsVisibleTo ekleme sorunu çözmek gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • apenney888

    apenney888

    27 EKİM 2010
  • expertvillage

    expertvillag

    5 NİSAN 2006
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009