以编程方式从clickonce应用程序.deploy文件中提取.dll

时间:2017-02-07 04:12:37

标签: c# .net dll clickonce

我在服务器(网络共享)上部署了一次单击应用程序,是否有一种以编程方式从.dll.deploy文件中提取.dll的方法。一旦我们启动应用程序,它就会转换为dll并放置在user / appdata / local / ...文件夹中,但是我需要一种方法来提取dll而不启动应用程序。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

只需通过省略.deploy后缀重命名文件即可。

由于此任务可能会有点繁琐 - 取决于ClickOnce包中的文件数量 - 您可能希望使用文件重命名工具。

<强>更新: 我只是注意到你要求以编程方式执行此操作。这使得它变得更加容易,因为您不必担心找到文件重命名工具:

public class Program
{
    private const string SourcePath = "\\\\ClickOnceDeployDir";

    private const string TargetPath = "C:\\Users\\UserName\\Documents\\ClickOnceTargetDir";

    public static void Main(string[] args)
    {
        var sourceDirectory = new DirectoryInfo(SourcePath);
        var targetDirectory = new DirectoryInfo(TargetPath);
        // you can omit this step if you would like to do the renaming in-place
        Copy(sourceDirectory, targetDirectory);

        foreach (var file in targetDirectory.GetFiles("*.deploy", SearchOption.AllDirectories))
        {
            var directoryName = file.DirectoryName;
            if (directoryName != null)
            {
                // here it is: rename the file
                file.MoveTo(Path.Combine(directoryName, Path.GetFileNameWithoutExtension(file.Name)));
            }
        }
    }

    private static void Copy(DirectoryInfo sourceDirectory, DirectoryInfo targetDirectory)
    {
        foreach (var file in sourceDirectory.GetFiles())
        {
            file.CopyTo(Path.Combine(targetDirectory.FullName, file.Name));
        }

        foreach (var directory in sourceDirectory.GetDirectories())
        {
            Copy(directory, targetDirectory.CreateSubdirectory(directory.Name));
        }
    }
}