diff --git a/src/InstallRuntimeDependencies.ts b/src/InstallRuntimeDependencies.ts index 84c00028c5..03d4cc900c 100644 --- a/src/InstallRuntimeDependencies.ts +++ b/src/InstallRuntimeDependencies.ts @@ -9,15 +9,19 @@ import { EventStream } from './EventStream'; import { getRuntimeDependenciesPackages } from './tools/RuntimeDependencyPackageUtils'; import { getAbsolutePathPackagesToInstall } from './packageManager/getAbsolutePathPackagesToInstall'; import IInstallDependencies from './packageManager/IInstallDependencies'; +import { AbsolutePathPackage } from './packageManager/AbsolutePathPackage'; -export async function installRuntimeDependencies(packageJSON: any, extensionPath: string, installDependencies: IInstallDependencies, eventStream: EventStream, platformInfo: PlatformInformation): Promise { - let runTimeDependencies = getRuntimeDependenciesPackages(packageJSON); - let packagesToInstall = await getAbsolutePathPackagesToInstall(runTimeDependencies, platformInfo, extensionPath); - if (packagesToInstall && packagesToInstall.length > 0) { +export async function installRuntimeDependencies(packageJSON: any, extensionPath: string, installDependencies: IInstallDependencies, eventStream: EventStream, platformInfo: PlatformInformation, useFramework: boolean): Promise { + const runTimeDependencies = getRuntimeDependenciesPackages(packageJSON); + const packagesToInstall = await getAbsolutePathPackagesToInstall(runTimeDependencies, platformInfo, extensionPath); + const filteredPackages = filterOmniSharpPackage(packagesToInstall, useFramework); + + if (filteredPackages && filteredPackages.length > 0) { eventStream.post(new PackageInstallation("C# dependencies")); // Display platform information and RID eventStream.post(new LogPlatformInfo(platformInfo)); - if (await installDependencies(packagesToInstall)) { + + if (await installDependencies(filteredPackages)) { eventStream.post(new InstallationSuccess()); } else { @@ -29,3 +33,8 @@ export async function installRuntimeDependencies(packageJSON: any, extensionPath return true; } +function filterOmniSharpPackage(packages: AbsolutePathPackage[], useFramework: boolean) { + // Since we will have more than one OmniSharp package defined for some platforms, we need + // to filter out the one that doesn't match which dotnet runtime is being used. + return packages.filter(pkg => pkg.id != "OmniSharp" || pkg.isFramework === useFramework); +} diff --git a/src/main.ts b/src/main.ts index d2f7e5b09e..0e3d9d5ec3 100644 --- a/src/main.ts +++ b/src/main.ts @@ -160,7 +160,7 @@ export async function activate(context: vscode.ExtensionContext): Promise downloadAndInstallPackages(dependencies, networkSettingsProvider, eventStream, isValidDownload, useFramework); - let runtimeDependenciesExist = await ensureRuntimeDependencies(extension, eventStream, platformInfo, installDependencies); + let runtimeDependenciesExist = await ensureRuntimeDependencies(extension, eventStream, platformInfo, installDependencies, useFramework); // activate language services let langServicePromise = OmniSharp.activate(context, extension.packageJSON, platformInfo, networkSettingsProvider, eventStream, optionProvider, extension.extensionPath); @@ -228,8 +228,8 @@ function isSupportedPlatform(platform: PlatformInformation): boolean { return false; } -async function ensureRuntimeDependencies(extension: vscode.Extension, eventStream: EventStream, platformInfo: PlatformInformation, installDependencies: IInstallDependencies): Promise { - return installRuntimeDependencies(extension.packageJSON, extension.extensionPath, installDependencies, eventStream, platformInfo); +async function ensureRuntimeDependencies(extension: vscode.Extension, eventStream: EventStream, platformInfo: PlatformInformation, installDependencies: IInstallDependencies, useFramework: boolean): Promise { + return installRuntimeDependencies(extension.packageJSON, extension.extensionPath, installDependencies, eventStream, platformInfo, useFramework); } async function initializeDotnetPath() { diff --git a/test/unitTests/InstallRuntimeDependencies.test.ts b/test/unitTests/InstallRuntimeDependencies.test.ts index c27622a56a..2668875cd2 100644 --- a/test/unitTests/InstallRuntimeDependencies.test.ts +++ b/test/unitTests/InstallRuntimeDependencies.test.ts @@ -25,6 +25,7 @@ suite(`${installRuntimeDependencies.name}`, () => { let eventStream: EventStream; let eventBus: TestEventBus; let platformInfo = new PlatformInformation("platform1", "architecture1"); + const useFramework = true; setup(() => { eventStream = new EventStream(); @@ -40,7 +41,7 @@ suite(`${installRuntimeDependencies.name}`, () => { }); test("True is returned", async () => { - let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo); + let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo, useFramework); expect(installed).to.be.true; }); @@ -49,7 +50,7 @@ suite(`${installRuntimeDependencies.name}`, () => { runtimeDependencies: {} }; - await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo); + await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo, useFramework); expect(eventBus.getEvents()).to.be.empty; }); }); @@ -78,7 +79,7 @@ suite(`${installRuntimeDependencies.name}`, () => { return Promise.resolve(true); }; - let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo); + let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo, useFramework); expect(installed).to.be.true; expect(inputPackage).to.have.length(1); expect(inputPackage[0]).to.be.deep.equal(AbsolutePathPackage.getAbsolutePathPackage(packageToInstall, extensionPath)); @@ -86,7 +87,7 @@ suite(`${installRuntimeDependencies.name}`, () => { test("Returns false when installDependencies returns false", async () => { installDependencies = async () => Promise.resolve(false); - let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo); + let installed = await installRuntimeDependencies(packageJSON, extensionPath, installDependencies, eventStream, platformInfo, useFramework); expect(installed).to.be.false; }); });