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

如何更改VS安装项目中包含的C#项目输出的文件扩展名,c#,visual-studio,visual-studio-2013,visual-studio-setup-proje,C#,Visual Studio,Visual Studio 2013,Visual Studio Setup Proje,我在Visual Studio 2013中有一个解决方案,其中包含许多不同的项目。其中之一是C#屏幕保护程序,构建为Windows应用程序(文件扩展名为“.exe”)。现在,我希望将该屏幕保护程序打包到VisualStudio安装项目中。但是在安装项目中,我只能包含C#项目的“主要输出”,这样输出文件就可以原封不动地打包到msi文件中。 有没有办法在C#项目设置或设置本身中更改文件扩展名(必须是.scr)?当我在后期生成事件中通过批处理/MSBuild顺序更改文件名时,无法再找到安装程序的“主输

我在Visual Studio 2013中有一个解决方案,其中包含许多不同的项目。其中之一是C#屏幕保护程序,构建为Windows应用程序(文件扩展名为“.exe”)。现在,我希望将该屏幕保护程序打包到VisualStudio安装项目中。但是在安装项目中,我只能包含C#项目的“主要输出”,这样输出文件就可以原封不动地打包到msi文件中。 有没有办法在C#项目设置或设置本身中更改文件扩展名(必须是.scr)?当我在后期生成事件中通过批处理/MSBuild顺序更改文件名时,无法再找到安装程序的“主输出”。奇怪的是:安装程序中已经有一个选项,上面写着“TargetName”,但它是灰色的,我无法在IDE中更改它,而且在安装项目的项目文件中也找不到该选项。谢谢你的帮助

编辑1:
是否有可能根本没有简单地重命名输出文件以将其包含在安装程序中的解决方案???

因为我发现完全没有解决方案来配置我的安装程序以重命名文件,我最终创建了一个附加的DLL,带有InstallerClass,以便在安装过程中作为自定义操作运行它

下面是一个很好的示例,可以帮助有类似问题的人做到这一点

我只是在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");
    }

可能重复我尝试在AfterBuild事件中添加复制顺序,但安装项目仍然使用“.exe”文件。这似乎对“主输出”不起作用。所有可执行文件最终是在同一个目录中还是在不同的目录中?这取决于项目类型。C输出在项目目录中自己的bin文件夹中创建,C++项目最终在解决方案的公共“释放”文件夹中。但在设置中,我只提供了对项目的引用,因此它会自行查找输出。即使在VS2019中,将
ScreenSaver.scr
手动添加到csproj中,也会生成
ScreenSaver.scr.dll