Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 14 additions & 16 deletions src/features/commands.ts
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ interface Command {

function projectsToCommands(projects: protocol.ProjectDescriptor[]): Promise<Command>[] {
return projects.map(project => {
let projectDirectory = project.Path;
let projectDirectory = project.Directory;

return new Promise<Command>((resolve, reject) => {
fs.lstat(projectDirectory, (err, stats) => {
Expand All @@ -98,7 +98,7 @@ function projectsToCommands(projects: protocol.ProjectDescriptor[]): Promise<Com
}

resolve({
label: `dotnet restore - (${project.Name || path.basename(project.Path)})`,
label: `dotnet restore - (${project.Name || path.basename(project.Directory)})`,
description: projectDirectory,
execute() {
return dotnetRestore(projectDirectory);
Expand All @@ -117,13 +117,13 @@ export function dotnetRestoreAllProjects(server: OmniSharpServer) {

return serverUtils.requestWorkspaceInformation(server).then(info => {

let projectDescriptors = protocol.getDotNetCoreProjectDescriptors(info);
let descriptors = protocol.getDotNetCoreProjectDescriptors(info);

if (projectDescriptors.length === 0) {
if (descriptors.length === 0) {
return Promise.reject("No .NET Core projects found");
}

let commandPromises = projectsToCommands(projectDescriptors);
let commandPromises = projectsToCommands(descriptors);

return Promise.all(commandPromises).then(commands => {
return vscode.window.showQuickPick(commands);
Expand All @@ -135,40 +135,38 @@ export function dotnetRestoreAllProjects(server: OmniSharpServer) {
});
}

export function dotnetRestoreForProject(server: OmniSharpServer, fileName: string) {
export function dotnetRestoreForProject(server: OmniSharpServer, filePath: string) {

if (!server.isRunning()) {
return Promise.reject('OmniSharp server is not running.');
}

return serverUtils.requestWorkspaceInformation(server).then(info => {

let projectDescriptors = protocol.getDotNetCoreProjectDescriptors(info);
let descriptors = protocol.getDotNetCoreProjectDescriptors(info);

if (projectDescriptors.length === 0) {
if (descriptors.length === 0) {
return Promise.reject("No .NET Core projects found");
}

let directory = path.dirname(fileName);

for (let projectDescriptor of projectDescriptors) {
if (projectDescriptor.Path === fileName) {
return dotnetRestore(directory, fileName);
for (let descriptor of descriptors) {
if (descriptor.FilePath === filePath) {
return dotnetRestore(descriptor.Directory, filePath);
}
}
});
}

function dotnetRestore(cwd: string, fileName?: string) {
function dotnetRestore(cwd: string, filePath?: string) {
return new Promise<void>((resolve, reject) => {
channel.clear();
channel.show();

let cmd = 'dotnet';
let args = ['restore'];

if (fileName) {
args.push(fileName);
if (filePath) {
args.push(filePath);
}

let dotnet = cp.spawn(cmd, args, { cwd: cwd, env: process.env });
Expand Down
15 changes: 12 additions & 3 deletions src/omnisharp/protocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -523,23 +523,32 @@ export function findNetStandardTargetFramework(project: MSBuildProject): TargetF

export interface ProjectDescriptor {
Name: string;
Path: string;
Directory: string;
FilePath: string;
}

export function getDotNetCoreProjectDescriptors(info: WorkspaceInformationResponse): ProjectDescriptor[] {
let result = [];

if (info.DotNet && info.DotNet.Projects.length > 0) {
for (let project of info.DotNet.Projects) {
result.push({ Name: project.Name, Path: project.Path });
result.push({
Name: project.Name,
Directory: project.Path,
FilePath: path.join(project.Path, 'project.json')
});
}
}

if (info.MsBuild && info.MsBuild.Projects.length > 0) {
for (let project of info.MsBuild.Projects) {
if (findNetCoreAppTargetFramework(project) !== undefined ||
findNetStandardTargetFramework(project) !== undefined) {
result.push({ Name: path.basename(project.Path), Path: project.Path });
result.push({
Name: path.basename(project.Path),
Directory: path.dirname(project.Path),
FilePath: project.Path
});
}
}
}
Expand Down