npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

msbuild

v1.2.0

Published

msbuild wrapper

Downloads

17,431

Readme

nodejs-msbuild

Clean. Build. Package. Publish.

Install

With npm do:

npm install msbuild

With bower do:

bower install msbuild

Override build path

msbuild.msbuildPath = 'c:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Current\\Bin\\msbuild.exe'

Override build path using using environment variable

name: MsbuildPath
value: <your path to msbuild> 
Example for VS 2022

name: MsbuildPath
value: C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin

Examples

nodejs-msbuild-examples

Build

var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.sourcePath = 'c:/your_app.sln';
msbuild.build();
var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.sourcePath = 'c:/your_app.sln';
msbuild.config('version','17.0')
msbuild.build(); 

Publish

*note: sourcePath .csproj

var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.sourcePath = 'c:/your_app.csproj';
msbuild.overrideParams.push('/P:User=myusername');
msbuild.overrideParams.push('/P:Password=myp@assword');
msbuild.publish();

Package

*note: sourcePath .csproj

var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.sourcePath = 'c:/your_app.csproj';
msbuild.package();

Logging to file

If you wish to log to file override "msbuild.logger". See example below.

var fs = require('fs');
var util = require('util');
var log_file = fs.createWriteStream(__dirname + '/log.txt', {flags : 'w'});
var log_stdout = process.stdout;

msbuild.logger = function(d) { //
  log_file.write(util.format(d) + '\n');
  log_stdout.write(util.format(d) + '\n');
};

Override targets and parameters

var _msbuild = require('msbuild');
var msbuild = new _msbuild(function(){});
msbuild.sourcePath = 'c:/your_app.sln';
msbuild.configuration='Release';
msbuild.publishProfile='Production_Environment';

var overrideParams = [];
	overrideParams.push('/p:VisualStudioVersion=14.0');
	overrideParams.push('/p:allowUntrustedCertificate=true');
	overrideParams.push('/P:Password=myp@assword');
	
msbuild.config('overrideParams',overrideParams);
msbuild.publish(); 

'/p:VisualStudioVersion=14.0' sets version location C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0 '/tv:14.0' sets proj file targets

Log only errors

var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.sourcePath = 'c:/your_app.sln';
msbuild.overrideParams.push('/clp:ErrorsOnly');
msbuild.build();

Preview commands and parameters by overriding exec. Can be helpful when troubleshooting.

var _msbuild = require('msbuild');
var msbuild = new _msbuild();
msbuild.sourcePath = 'c:/your_app.sln';
msbuild.configuration = 'your_app_configuration';
msbuild.publishProfile='your_app_publish_profile';
msbuild.exec  = function(cmd,params,cb){
	console.log('\nTEST 1: Preview MSBUILD Command');
	console.log('********** test - start ************');
	console.log(cmd);
	console.log(params);
	console.log('********** test - end  ************\n');
}
msbuild.publish();

Adding a callback.

var your_callback = function(){
	console.log('msbuild done. move on...');
}	
var _msbuild = require('msbuild');
var msbuild = new _msbuild(your_callback); 
msbuild.sourcePath = 'c:/your_app.sln';
msbuild.configuration = 'your_app_configuration';
msbuild.publishProfile='your_app_publish_profile';
msbuild.build();

Logging to file by overriding log method

var fs = require('fs');
var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.logger =  function(results){
	fs.appendFile('test.txt', '\n' + results, function (err) {});
};

Logging to file by extending events

var fs = require('fs');
var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.on('status',function(err,results){ 
	fs.appendFile('test.txt', '\nRESULTS: ' + results, function (err) {});
});
msbuild.on('error',function(err,results){ 
	fs.appendFile('test.txt', '\nERROR: ' + results, function (err) {});
});
msbuild.on('done',function(err,results){ 
	fs.appendFile('test.txt', '\nDONE: ' + results, function (err) {});
});

additional configuration parameters

  • os currently only support windows
  • processor 'x86', 'x64'
  • version tools version; determines local path to msbuild.exe
  • sourcePath 'c:/mypath/mysolution.sln' or 'c:/mypath/myproject.csproj
  • configuration solution configurations; targets an environment (debug,release)
  • publishProfile publish profile; targets a specific machine (app01,app02)
  • outputPath package deploy path
  • overrideParams property overrides ['/p:WarningLevel=2','/p:OutputDir=bin\Debug','/tv:4.0']

Notes / Updates

Msbuild version "3.5.0" now available.

Changes include: 
1. removed csproj and sln validation. not necessary. 
2. fixed broken tests commented out in release "3.4.0"
3. moved examples into separate repo [nodejs-msbuild-examples](https://github.com/jhaker/nodejs-msbuild-examples)

Msbuild version "3.1.0" now available.

Changes include: 
1. console.log extracted to allow extension 
2. minor formatting - adjustment of line indentations

View git project for more examples.

New target versions

	'12.0': '12.0',
    '14.0': '14.0'

Linux support added in version: "0.2.1" (thanks to richorama)

Msbuild version "0.2.4" now available.

Changes include: 
1. overrideParams validation has been corrected to support single character parameters 
  Example: "/m"
2. no longer requires "configuration" 
3. no longer requires "publishProfile"

"sourcePath" is required if the "configuration" and "publishProfile" are not defined

FAQ

Error: ERROR_USER_UNAUTHORIZED

build script

var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.sourcePath = 'C:/myproject.sln'
msbuild.publishProfile = 'myproject';
msbuild.configuration = 'release';
msbuild.publish();

error

"C:\myproject\myproject.csproj" (default target) (1) ->
(MSDeployPublish target) ->  C:\Program Files (x86)\MSBuild
\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.
targets(4295,5): msdeploy error ERROR_USER_UNAUTHORIZED: 
Web deployment task failed. (Connected to the remote 
computer ("111.111.111.11") using the Web Management Service, 
but could not authorize. Make sure that you are using the 
correct user name and password, that the site you are 
connecting to exists, and that the credentials represent a 
user who has permissions to access the site.  Learn more at:
http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_
UNAUTHORIZED.) [C:\myproject\myproject.csproj]

    5 Warning(s)
    1 Error(s)

Answer:

Add deployment credentials.

  • Option 1: Add to publish profile (myproject.pubxml)
  • Option 2: Pass into msbuild as a configuration parameter

(Option 1)

  • Open "C:\myproject\Properties\PublishProfiles" folder
  • Open myproject.pubxml in notepad or notepad++
  • Add "user_name"
  • Add "user_pwd"

(Option 2)

  • Modify your build script by adding "'/P:User=user_name'" and "'/P:Password=user_pwd'" overrideParams.
/*** modified build script ***/
var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.sourcePath = 'C:/myproject.sln'
msbuild.publishProfile = 'myproject';
msbuild.configuration = 'release';
msbuild.overrideParams.push('/P:User=user_name');
msbuild.overrideParams.push('/P:Password=user_pwd');
msbuild.publish();

Error: MSB8020

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\ Microsoft.Cpp.Platform.targets(64,5): error MSB8020: The build tools for Visual Studio 2012 (Platform Toolset = 'v110') cannot be found.

Answer:

Include overrideParams(--msvs_version=2012) or update your csproj files

Error: MSB3073

I am able to build and package a project from Visual Studio but not through msbuild.

build script

var _msbuild = require('msbuild');
var msbuild = new _msbuild(); 
msbuild.sourcePath = 'C:/myproject/myproject.csproj'
msbuild.package();

error

"C:\myproject\myproject.csproj" (package target) (1) ->(
BuildPackage target) ->  C:\.nuget\NuGet.targets(109,9): 
error : The imported project "C:\Program Files 
(x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications
\Microsoft.WebApplication.targets" was not found. 
Confirm that the path in the <Import> declaration is 
correct,and that the file exists on disk.  C:\myproject
\myproject.csproj [C:\myproject\myproject.csproj] 
C:\.nuget\NuGet.targets(109,9): error MSB3073:The 
command ""..\.nuget\NuGet.exe" pack "C:\myproject
\myproject.csproj" -Properties "Configuration=Debug;
Platform=AnyCPU" -NonInteractive -OutputDirectory 
"C:\myproject\bin" -symbols" exited with code 1. 
[C:\myproject\myproject.csproj]    7 Warning(s)

Answer:

Try removing <BuildPackage>true</BuildPackage> from project configuration file "*.csproj". It can be found near the top nested under <PropertyGroup>.

If anyone knows why this worked in Visual Studio but not cmd line please post.