kilitlemek vermemek için bir test kütüphanesigölge kopyalama düzeneğini
public class Test
{
public int Add(int val1, int val2)
{
return val1 + val2;
}
}
Ve onu aramak için bir proje oluşturduk? Derlemem neden kilitli?
DÜZENLEME: kodlanmış montaj adıyla:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.IO;
namespace Loader
{
class Program
{
static void Main(string[] args)
{
AppDomainSetup ads = new AppDomainSetup();
String fullPath = @"c:\users\myuser\documents\visual studio 2010\Projects\ShadowCopy\Loader\bin\Debug\Lib.dll";
ads.ShadowCopyFiles = "true";
ads.ApplicationName = "AppName";
ads.ShadowCopyDirectories = Path.GetDirectoryName(fullPath);
//ads.ApplicationBase = Path.GetDirectoryName(fullPath);
//ads.PrivateBinPath = Path.GetDirectoryName(fullPath);
ads.CachePath = @"c:\users\myuser\documents\visual studio 2010\Projects\ShadowCopy\Loader\bin\Debug\Cache\";
AppDomain ad = AppDomain.CreateDomain("myName" + ads.ApplicationName, null, ads);
ad.AssemblyResolve += new ResolveEventHandler(ad_AssemblyResolve);
Console.WriteLine(ad.ShadowCopyFiles);
Console.WriteLine(ad.SetupInformation.ShadowCopyDirectories);
try
{
//Assembly assembly = ad.Load(AssemblyName.GetAssemblyName(fullPath));
//dynamic obj = ad.CreateInstanceAndUnwrap(assembly.GetName().Name, "Lib.Test");
dynamic obj = ad.CreateInstanceAndUnwrap("Lib", "Lib.Test");
Console.WriteLine(obj.Add(1, 7));
Console.ReadKey();
Console.WriteLine(obj.Add(1, 90));
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
static Assembly ad_AssemblyResolve(object sender, ResolveEventArgs args)
{
return Assembly.LoadFile(@"c:\users\myuser\documents\visual studio 2010\Projects\ShadowCopy\Loader\bin\Debug\Lib.dll");
}
}
}
O assebly önbelleğe da kilitli olduğunu ilginçtir.
DÜZENLEME 2: Burada
Lib.Test bir yöntem engellenir assenbly erişilen Bir kez aksamı
Console.WriteLine(obj.Add(1, 7));
engellemek için kod hattıdır.
Çözüm ne olabilir? İki seçeneğiniz vardır
Lütfen tam olarak aldığınız hatayı gönderin. –
Söylediğim kesin problem şu ki Lib.dll grubu kilitlendi. Örneğin, uygulama çalışırken onu yeniden gönderemiyorum. – NDeveloper
Kodunuzun yapı tipini birincil uygulama alanına yüklemesini önlemek için 3. montajda bir arabirim kullanmanız gerekir. LoadFile kullanmayın. –