如何更改VS Setup Project中包含的C#项目输出的文件扩展名

时间:2014-06-26 12:30:18

标签: c# visual-studio visual-studio-2013 visual-studio-setup-proje

我在Visual Studio 2013中有一个包含许多不同项目的解决方案。其中一个是C#屏幕保护程序,构建为Windows应用程序(文件扩展名" .exe")。现在我希望将屏幕保护程序打包到visual studio安装项目中。但在设置项目中,我只能包含"主要输出" C#项目,以便输出文件不变地打包到msi文件中。 有没有办法在C#项目设置或安装程序本身中更改文件扩展名(必须是.scr)?当我在postbuild事件中通过批处理/ MSBuild命令更改文件名时,"主要输出"为了设置不能再找到。奇怪的是:设置中已经有一个选项" TargetName",但它是灰色的,我无法在IDE中更改它,我也无法在设置的项目文件中找到该选项项目。谢谢你的帮助!

编辑1:

是否有可能只是简单地重命名输出文件以将其包含在设置中?

1 个答案:

答案 0 :(得分:0)

由于我发现绝对没有配置我的安装程序重命名文件的解决方案,我最终创建了一个带有InstallerClass的附加DLL,以便在安装过程中将其作为自定义操作运行。

以下是一个很好的示例,如何为遇到类似问题的人做到这一点

Custom Action in Visual Studio setup projects (Code Project)

我只是在Install方法中重命名该文件,并在Uninstall方法中将其重命名,以便正确删除。

    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);
        var text = Context.Parameters["ScreensaverPath"];
        var file = new FileInfo(text + "MyScreenSaver.exe");
        if (!file.Exists)
            return;
        file.MoveTo(text + "MyScreenSaver.scr");
    }

    public override void Uninstall(IDictionary savedState)
    {
        base.Uninstall(savedState);
        var text = Context.Parameters["ScreensaverPath"];
        var file = new FileInfo(text + "MyScreenSaver.scr");
        if (!file.Exists)
            return;
        file.MoveTo(text + "MyScreenSaver.exe");
    }