Не ответ, но подсказка мог быть то, что большинством принтеров Dell является переименованное Орудие. Мог бы быть внешний выстрел, если Вы могли бы выяснить то, что является самой близкой моделью к t
Я не знаю, что вы пытаетесь сделать, но есть несколько устаревших методов для включения ShadowCopy в текущем домене приложения.
AppDomain.CurrentDomain.SetCachePath(@"C:\Cache");
AppDomain.CurrentDomain.SetShadowCopyPath(AppDomain.CurrentDomain.BaseDirectory);
AppDomain.CurrentDomain.SetShadowCopyFiles();
Иногда невозможно изменить код метода Main (), потому что, например, вы пишете подключаемый модуль, и его экземпляр создается менеджером.
В этом случае я предлагаю вам скопировать сборку и pdb (и зависимые в событии AssemblyResolve) во временное место и загрузить их оттуда с помощью Assembly.LoadFile () (не LoadFrom ()).
Плюсы: - нет блокировки dll. - каждый раз при перекомпиляции целевой сборки вы получаете доступ к новой версии (поэтому .LoadFile ()). - вся сборка полностью доступна в AppDomain.CurrentDomain.
Минусы: - необходимо копирование файла. - сборки нельзя выгружать, и это может быть неудобно, потому что ресурсы не освобождаются.
С уважением,
П.Д.: Этот код выполняет свою работу.
/// <summary>
/// Loads an assembly without locking the file
/// Note: the assemblys are loaded in current domain, so they are not unloaded by this class
/// </summary>
public class AssemblyLoader : IDisposable
{
private string _assemblyLocation;
private string _workingDirectory;
private bool _resolveEventAssigned = false;
/// <summary>
/// Creates a copy in a new temp directory and loads the copied assembly and pdb (if existent) and the same for referenced ones.
/// Does not lock the given assembly nor pdb and always returns new assembly if recopiled.
/// Note: uses Assembly.LoadFile()
/// </summary>
/// <param name="assemblyOriginalPath"></param>
/// <returns></returns>
public Assembly LoadFileCopy(string assemblyLocation)
{
lock (this)
{
_assemblyLocation = assemblyLocation;
if (!_resolveEventAssigned)
{
_resolveEventAssigned = true;
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(AssemblyFileCopyResolveEvent);
}
// Create new temp directory
_workingDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
Directory.CreateDirectory(_workingDirectory);
// Generate copy
string assemblyCopyPath = Path.Combine(_workingDirectory, Path.GetFileName(_assemblyLocation));
System.IO.File.Copy(_assemblyLocation, assemblyCopyPath, true);
// Generate copy of referenced assembly debug info (if existent)
string assemblyPdbPath = _assemblyLocation.Replace(".dll", ".pdb");
if (File.Exists(assemblyPdbPath))
{
string assemblyPdbCopyPath = Path.Combine(_workingDirectory, Path.GetFileName(assemblyPdbPath));
System.IO.File.Copy(assemblyPdbPath, assemblyPdbCopyPath, true);
}
// Use LoadFile and not LoadFrom. LoadFile allows to load multiple copies of the same assembly
return Assembly.LoadFile(assemblyCopyPath);
}
}
/// <summary>
/// Creates a new copy of the assembly to resolve and loads it
/// </summary>
/// <param name="sender"></param>
/// <param name="args"></param>
/// <returns></returns>
private Assembly AssemblyFileCopyResolveEvent(object sender, ResolveEventArgs args)
{
string referencedAssemblyFileNameWithoutExtension = System.IO.Path.GetFileName(args.Name.Split(',')[0]);
// Generate copy of referenced assembly
string referencedAssemblyPath = Path.Combine(Path.GetDirectoryName(_assemblyLocation), referencedAssemblyFileNameWithoutExtension + ".dll");
string referencedAssemblyCopyPath = Path.Combine(Path.GetDirectoryName(args.RequestingAssembly.Location), referencedAssemblyFileNameWithoutExtension + ".dll");
System.IO.File.Copy(referencedAssemblyPath, referencedAssemblyCopyPath, true);
// Generate copy of referenced assembly debug info (if existent)
string referencedAssemblyPdbPath = Path.Combine(Path.GetDirectoryName(_assemblyLocation), referencedAssemblyFileNameWithoutExtension + ".pdb");
if (File.Exists(referencedAssemblyPdbPath))
{
string referencedAssemblyPdbCopyPath = Path.Combine(Path.GetDirectoryName(args.RequestingAssembly.Location), referencedAssemblyFileNameWithoutExtension + ".pdb");
System.IO.File.Copy(referencedAssemblyPath, referencedAssemblyCopyPath, true);
}
// Use LoadFile and not LoadFrom. LoadFile allows to load multiple copies of the same assembly
return Assembly.LoadFile(referencedAssemblyCopyPath);
}
public void Dispose()
{
Dispose(true);
}
private void Dispose(bool disposing)
{
if (disposing)
{
if (_resolveEventAssigned)
{
AppDomain.CurrentDomain.AssemblyResolve -= new ResolveEventHandler(AssemblyFileCopyResolveEvent);
_resolveEventAssigned = false;
}
}
}
}