Tag: shadow copy

Shadow Copying,以及从任意文件夹加载的混合C#和C ++ DLL

我有一个VS 2005 C#项目,它使用一个特殊的Plugin文件夹来加载额外的DLL(用作资产转换过程中的节点)。 我在这个文件夹中混合使用C#和C ++ DLL。 我遇到的问题是,启用卷影复制时,C ++ DLL拒绝使用Assembly.LoadFrom加载。 我试图创建一个自定义应用程序域,并使用Load,但这也失败了。 最后,我尝试在byte []数据中读取DLL并使用Load on – 再次,只有C#DLL才会以这种方式工作,并显示错误“附加信息:无法validation的代码失败策略检查。(HRESULTexception:0x80131402) ”。 网上的一篇文章促使我在构建特定的DLL时尝试使用/ clr:safe,但由于Microsoft代码中存在数千个错误而导致它无法构建…(显然) 禁用阴影复制后,LoadFrom适用于所有DLL。 该应用程序本身是Maya的一个插件,这曾经与Maya 8.5一起使用,但在2008/2009年失败(如果启用了Shadow Copying)。 我们真的更喜欢使用Shadow Copying,因为它可以在应用程序运行时阻止DLL文件锁定(Plugins文件夹存储在Perforce可以在应用程序运行时更新的位置)。 关于如何说服Shadow Copying使用自定义文件夹和混合使用C#/ C ++ DLL而没有这些问题的任何想法?

MEF和ShadowCopying DLL,以便我可以在运行时覆盖它们

我试图阻止我的应用程序锁定我的MEF插件目录中的DLL,以便我可以在运行时覆盖程序集(注意我实际上并没有尝试让MEF在运行时重新加载它们,在下一个应用程序启动很好,我只是不想要停止应用程序来复制) 我试图通过为我的mef加载的程序集创建一个阴影复制的应用程序域来执行此操作,如下所示: [Serializable] public class Composer:IComposer { private readonly string _pluginPath; public Composer(IConfigurePluginDirectory pluginDirectoryConfig) { _pluginPath = pluginDirectoryConfig.Path; var setup = new AppDomainSetup(); setup.ShadowCopyFiles = “true”; // really??? is bool not good enough for you? var appDomain = AppDomain.CreateDomain(AppDomain.CurrentDomain.FriendlyName + “_PluginDomain”, AppDomain.CurrentDomain.Evidence, setup); appDomain.DoCallBack(new CrossAppDomainDelegate(DoWorkInShadowCopiedDomain)); } private void DoWorkInShadowCopiedDomain() { // This work will happen […]

AppDomain阴影复制无法正常工作(原始程序集已锁定)

这是我用来探测可用插件列表的一个小类: internal static class PluginDirectoryLoader { public static PluginInfo[] ListPlugins(string path) { var name = Path.GetFileName(path); var setup = new AppDomainSetup { ApplicationBase = path, ShadowCopyFiles = “true” }; var appdomain = AppDomain.CreateDomain(“PluginDirectoryLoader.” + name, null, setup); var exts = (IServerExtensionDiscovery)appdomain.CreateInstanceAndUnwrap(“ServerX.Common”, “ServerX.Common.ServerExtensionDiscovery”); PluginInfo[] plugins = null; try { plugins = exts.ListPlugins(); // <– BREAK HERE […]

如果当前副本正在使用,则打开文件的卷影副本

我正在尝试在服务器上备份文件,但其中一些正在使用中,无法打开。 相反,如果当前副本正在使用中,我想打开它们的卷影副本。 我怎样才能做到这一点? 作为参考,我使用的是C#.net 3.5。

从AppDomain卸载.DLL所需的帮助 – 即使使用ShadowCopy仍然无法正常工作

我正在尝试执行以下操作。 应用程序A是“母亲应用程序”。 它保持开放。 App B只是一个.DLL,我写了一些从App A中指定的接口派生的类。 然后,从App A,我将从App B“导入”类并在其中运行方法。 我希望能够动态更改App B(更改代码并重新编译)并使用App A中的新代码。 我在App B中有一个后编译命令,它将新的.DLL复制到App A目录。 应用A创建一个新的AppDomain并使用ShadowCopying。 我认为这就足够了,但是当我尝试重新编译和复制App B的新.DLL时,它表示该文件正在使用中且无法覆盖。 这是我现在的代码: App A(代码中的TestServer): namespace TestServer { public interface IRunnable { void Run(); } class Program { static void Main(string[] args) { AppDomainSetup setup = new AppDomainSetup(); setup.ApplicationName = “DemoApp”; setup.ApplicationBase = Environment.CurrentDirectory; setup.ShadowCopyDirectories = Environment.CurrentDirectory; setup.ShadowCopyFiles = […]