We have an old Silverlight project that we have to maintain while a modern replacement is developed.
For build and publication, we use Azure DevOps.
The problem arose after Windows 2019 and 2022 remained in the available images of Azure DevOps. With versions of VS with which the project with Silverlight stopped building.
Visual Studio Enterprise 2019 16.11.32901.82
Visual Studio Enterprise 2022 17.3.32901.215
2022-09-10T14:26:05.9397408Z ##[error]abcWebSilverlight\abcWebSilverlight.csproj(1056,11): Error MSB4226: The imported project "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Microsoft\Silverlight\v5.0\Microsoft.Silverlight.CSharp.targets" was not found. Also, tried to find "Microsoft\Silverlight\v5.0\Microsoft.Silverlight.CSharp.targets" in the fallback search path(s) for $(MSBuildExtensionsPath32) - "C:\Program Files (x86)\MSBuild" . These search paths are defined in "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\msbuild.exe.Config". Confirm that the path in the <Import> declaration is correct, and that the file exists on disk in one of the search paths.
Now, to solve the problem with the building, I see two possible ways:
Somehow install the necessary VS version.
I've googled all over the internet but can't find how to do it.
In the Build task, I set the desired version and the build jumps to the available version of the studio because others are not installed in the system.
Dirty hack. Try to somehow install the extension https://marketplace.visualstudio.com/items?itemName=RamiAbughazaleh.SilverlightProjectSystem&ssr=false#qna in the hope that the project will work.
But then again, in Azure DevOps, I don't see a tool that allows me to do this.
I would appreciate any advice on a possible solution to my problem.
Thank you.
You cannot use Visual Studio 2017 or later to build old Silverlight (v4 or v5) projects - you have to continue using Visual Studio 2015.
Source: https://learn.microsoft.com/en-us/visualstudio/releases/2017/vs2017-compatibility-vs
Silverlight projects are not supported in this version of Visual Studio. To maintain Silverlight applications, continue to use Visual Studio 2015.
In Azure DevOps, the only way to get this to work is to setup your own instance of Windows with VS2015 (or the VS2015 build tools) installed and then also install the Azure DevOps self-hosted pipeline agent (for building: https://learn.microsoft.com/en-us/azure/devops/pipelines/agents/agents?view=azure-devops&tabs=browser#install)
The instance can be either on-premises or cloud-hosted (either Azure or even an AWS VM instance) and will work so long as it can access the internet to communicate with Azure DevOps (configuration is a bit different if you're using DevOps Server).
I'm trying to deploy an application that uses Microsoft ReportViewer 2012 that needs Microsoft® System CLR Types per SQL Server 2012 in order to work but I can't get to install it with ClickOnce.
I checked them in project's prerequisites but it seems they cannot be found
(I checked download from the web).
even if they're present in
C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages
When I deploy my setup installation fail because it can't download SqlClrTypes. If I install them using the same msi manually it works ok.
What can I do to make them install via ClickOnce ?
I'm using Visual Studio 2017, tried 2019 but the same thing happen.
EDIT: Fixed the issue with the prerequisites, my product.xml was referring to the wrong version for some reason. Now the setup is created without issue but when I try the installation it fails when downloading the msi. From the install.log it tries to download it from : http://go.microsoft.com/fwlink/?LinkID=221258
I have my my setup project in (Visual Studio 2015: Community Edition) ready to be built and create my program installer. But, obviously the program will not work on other computers without the appropriate redistributable package installed on the clients computer.
So, I need to set that up in my project but I do not know how. I read in a post on another site that it is located in:
Project>>Setup Properties>>Prerequisites
But, all I just see are selectables for ".net framework" related things. Also, I read that merge modules are not good to use due to servicing issues.
If you have any insight into whether I am needing to download an extension for the correct prerequisite to appear, use merge modules, or something else it will be greatly appreciated!
My WPF project requires Adobe Reader. Apparently when I try and run the installer, it says I need to have it installed before I run the installer for my project.
I was wondering how do I package it along with InstallShield so that the user can select the option to have Adobe Reader install before installing the main project instead of having to search for it online themselves to install it?
Is this even possible? I tried to search online but I'm having hard time finding results.
Right now I'm using InstallShield Limited Edition for Visual Studio 2012.
EDIT:
Here's one screenshot where I picked the settings:
EDIT #2: I found a redistributable .exe of Adobe Reader 9.1. Now, I am wondering how I can tie that into InstallShield?
I have an application that needs to be delivered as a package.
What are the best among EXE and MSI Installers, and why?
Is there any open source tool to decompile the EXE or MSI?
It depends on what kind of EXE you are talking about.
MSI is setup package that is run by Windows Installer. If you make setup project with Visual Studio it will provide both MSI and EXE for you. EXE in this case just a bootstrapper (MSI or EXE). It will run MSI after checks that Windows Installer is in place.
If you use other tools like InnoSetup, this EXE is a setup package itself, not a bootstrapper.
Regarding to your question about MSI editor: Orca MSI Editor.
If don't need need very complicated installer, I suggest using Visual Studio setup project as it is simple, yet powerful enough.
Many installers these days use MSI internally although they're distributed as EXE. You need an EXE to ensure all the prerequisites are installed: .NET framework, for example; and it installs the prerequisites if they're not. Then it extracts the MSI package which handles the rest of the installation.
MSI provides some advanced install features:
rollback support: if something failed during installation, it returns the system to the state before installation started.
repair: if your application stopped functioning correctly, users can use this feature to reinstall the application. It restores missing files, registry entries.
updates/upgrades: MSI handles application updates/upgrades. MSI package can be configured to automatically the previous version of the application when user starts installation of a newer version. This happens transparently to user: it looks as if only the new version is installed.
patches: MSI supports patches. When only several files of your application are modified, you can update them using a patch package (MSP). The patch will be smaller than the full package.
advertised shortcuts: you can allow users to not install some features of your application unless they're used. When users access such a feature, MSI installs the necessary files.
Though it takes some time to learn the technology.
You can do anything from an EXE file, while MSI is for installation only. Inno Setup and NSIS installation packages are distributed as exe files. They have a scripting language which describes installation steps.
WiX toolset has MSI decompiler called dark.
check Difference between EXE and MSI
I posted a summary of some MSI benefits (and problems) on serverfault.com:
https://serverfault.com/questions/11670/advantages-of-using-msi-files
MSI is a Microsoft Installer, it is newer than the older EXE , Wise Installer and many others support it. It allows for a smarter install with what needs to be deployed (like CAB files, and registry settings etc...) and it can check for previous installs etc..
MSI are ONLY installations, while EXE can do other things like run.
I would use InstallShield and build an MSI
I'm unsure about #2
You can just tell Visual Studio to make your application into an MSI/EXE. If that works and does what you want, just do that. It much effort on your part creating an installer.
MSI means you are using Microsoft's Installer. Microsoft has legitimate reasons for recommending (i.e., not giving your application Certification) MSI. However, a good MSI is tough to produce, so I don't recommend it unless you need your application to be certified.
If you don't require certification, I recommend Inno Setup, along with a front-end like ISTool. It's easy to use and gives you simple interfaces to perform most common installer tasks. In a pinch, it supports scripting to allow you to do anything it doesn't support.