Code Monkey home page Code Monkey logo

coapp.powershell's People

Contributors

fearthecowboy avatar wwahammy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

coapp.powershell's Issues

File access errors during multithreaded builds

Sometimes when building a big solution, which contains a lot of projects consuming multiple packages (with multiple projects consuming the same package), I get an error such as this one during (usually early in) the build:

1>D:\dev\NugetCache\Boost.1.52.0-a\build\native\Boost.targets(189,5): error : NuGet Error:The process cannot access the file 'D:\dev\NugetCache\Boost.1.52.0-a\build\native\bin\x64\v110_xp\Release\boost_serialization-vc110-mt-1_52.dll' because it is being used by another process.

Most of the time, just aborting the build and trying again resolves the error. I guess it is caused by two separate builds trying to access (copy?) the same file from the same package simultaneously.

I don't know if this is a NuGet issue or a CoApp issue. Unfortunately, I also don't know yet if I can provide some minimal setting that will reproduce this bug, but I'll keep trying to isolate it.

Invoke-Build passes incomplete error messages from inner tasks

v 1.23.255

Example, same error from a common .vcxproj file:
(Invoke-Build)
(82,0):Error ERROR:'apr_os_level' : undeclared identifier [C:\coapp-packages\apr\copkg\libapr-1.vcxproj]

(msbuild)
c:\coapp-packages\apr\user\win32\userinfo.c(82): error C2065: 'apr_os_level' : undeclared identifier [C:\coapp-packages\apr\COPKG\libapr-1.vcxproj]

When a static lib project consumes a package with DLLs, don't copy them to output folder

I have a native NuGet package with some DLLs defined with "bin:" in the autopkg file. When any native project which consumes the generated package is built, these DLLs are copied to the output folder of the project.

This may be desired if the consuming project is an application or a DLL by itself, but is probably undesirable if the consuming project is a static library (in our case, static libraries are built to a separate "lib" output folder).

I think this behavior should either be possible to toggle on/off, or turned off altogether for consuming projects which are static libraries.

Can't reinstall package without restarting Visual Studio

As of the current development version (2.4.199.0), every time I reinstall a package (from the Package Manager Console, using update-package somepackage -reinstall) - which I do a lot - I am asked to restart Visual Studio to finish the reinstallation. This was not the case in the previous version I used (which was the beta/stable one).

To reproduce this, build a project that consumes the package before trying to reinstall it.

Write-NuGetPackage fails when files are "too big"?

The following autopackage script fails if each of the "big-64" and "big-32" folders contains 5 DLLs, each of which is about 2MB in size. It doesn't fail if the DLLs are small (a few KB each).

files {
    [x64] { 
        bin: big-64\*.dll;
    }
    [x86] { 
        bin: big-32\*.dll;
    }
};

The error message is:

Write-NuGetPackage : The given key was not present in the dictionary.

I created a minimal script (with fake "DLLs") to reproduce this issue, I'll try to upload it.

Unable to re-use previously used environment settings in Invoke-Build

v 1.23.187

Attempting to use .SetEnvironmentFromTarget on a previously used target environment results in the environment being declared as invalid. It appears that the actual environment variables are replaced appropriately, but the variable which declares it as valid is set improperly.

eg.

.SetEnvironmentFromTarget.Target = "VC_V110_X64";
.Message.Text = "$(IsEnvironmentValid)";  // true
.SetEnvironmentFromTarget.Target = "VC_V110_X64";
.Message.Text = "$(IsEnvironmentValid)";  // false

Allow specifying DLLs as delay-loaded DLLs

When including DLLs in a package (e.g. using "bin: "), it is useful to be able to specify that these DLLs need to be delay-loaded. This is done by adding the DLL file name (without path) to the DelayLoadDLLs linker option.

Some important notes:

  • It should be subject to conditions, so that the consumer of the package can be given the choice of whether the DLL is delay loaded or not.
  • This should probably go to the redist & symbol packages, not the main package (?).
  • Right now this can be done by adding ItemDefinitionGroup.Link.DelayLoadDLLs += "dllname.dll" to the targets section, under some custom condition. There is room for improvement: it would be better if the DLL file name did not have to be typed in again (too error prone) - I mean, I would expect this to be part of what "bin: " (or an alternative file list) does, when the consumer enables delay loading.
  • Probably related feature (may be needed to implement this): a command like "add-each-file" that will ignore paths and add file names to the list.

Undocumented (?) search path for @import

When adding an import directive to an autopkg file, e.g. @import "inc.autopkg"; where does it look for inc.autopkg?

I could not find any documentation regarding this. Moreover, when my script which resided in /foo/bar/main.autopkg imported "inc.autopkg" it was able to load /foo/inc.autopkg, i.e. from the parent folder.

Allow creating hard links to DLLs instead of copying them

Write-NuGetPackage generates an MSBuild "Copy" task in the targets file for each DLL specified with "bin:" in the autopkg file.

I would like to be able to pass "UseHardlinksIfPossible=true" to the Copy command, thereby creating hard links to the DLLs instead of copying them. In many native libraries this makes a huge difference - I have seen libraries with hundreds of megabytes worth of DLLs, and it takes time to copy them around.

"Referenced Packages" property sheets are not updated when reinstalling packages

Steps to reproduce:

  1. Create a package from the attached autopkg script and put it in your package source.
  2. Create a new VC++ project.
  3. Install the PropertySheetBug package into the project.
  4. Go to the property pages of the project, and see that there is no "Referenced Packages" section, as expected.
  5. Uncomment all commented lines in the autopkg script and recreate the package. Update the package source (with the same version number).
  6. Go to the Package Manager Console in Visual Studio and type: Update-Package PropertySheetBug -reinstall. Examine output to make sure the package was successfully uninstalled and then installed again.
  7. Go to the property pages of the project.

Expected: there is now a "Referenced Packages" section with the "Something" property from the package.
Actual: there is still no such section.

Note that this only seems to happen when keeping the same version number and using the -reinstall switch (which is common while developing a package).

Configuration selector does not influence bin files?

Repro:

configurations
{

    TEST
    {
      choices: {TESTNo, TESTYes};
    };
}

files {

[TESTYes] {
bin: {file1.dll};
}

[TESTNo] {
bin: {file2.dll};
}

}

In this case file2.dll is always copied to the output folder.

As far as I undertand the generated msbuild code, the value of the property is not propagated to the "redist" package and always has a default value (the first one, I guess).

"Linkage" setting is generated for packages that don't use them in weird circumstances

Steps to reproduce:

  1. Create a package from the attached autopkg script and put it in your package source.
  2. Create a new VC++ project.
  3. Install the PropertySheetBug package into the project.
  4. Go to the property pages of the project, look under "Referenced Packages" section.

Expected: there is exactly one setting - "Something", which is indeed used by the package.
Actual: there is one more setting besides "Something", which is "Linkage". It is not used by the package and seems to come out of nowhere.

Weird note: repeat this experiment with the commented line entirely removed. Alternatively, change the description (within the commented line) from "statically dynamically" to something else. Either way, the "Linkage" setting will no longer be generated!

Hide overlay packages in the package manager

I suppose you'd need to cooperate with the NuGet fellows for this one, but it would be really nice if the overlay packages you're never supposed to install anyway did not appear in the list of available packages in Visual Studio.

Alphabetize imports in vcxproj file

I'm not sure whether this is a NuGet or a CoApp issue, but here goes anyway.

When consuming a native package, two "Import" elements are added to the vcxproj file: one in the top of the file (of a .props file) and one in the bottom of the file (of a .targets file). The imports in each group are sorted by package installation order. This has the effect of creating unnecessary file modifications (a pain with source control) when a given version of a package is reinstalled, because its imports will move from wherever they are to the end/beginning of each list.

My suggestion: alphabetize the imports instead.

Requested: a command like CopyToOutput, but to an arbitrary folder

Files included in the autopackage script with "bin:" are automatically copied to the output folder of the project consuming the package. I suppose this is triggered by this line in PackageScriptTemplate.autopkg:

#add-each-file : ::nuget.[redist]targets.[${condition}].CopyToOutput;

It seems that this CopyToOutput command is defined in C# code and not in an autopackage script, so it cannot be easily overridden in my scripts. What I would like is a command very like CopyToOutput (which still uses the MSBuild Copy task to copy when building, and still uses hard links as I requested in a previous issue), except it will copy the files to an arbitrarily supplied folder instead of the project target folder. This folder may vary by pivots (win32, x64, debug, release...).

What I need to achieve by this: instead of copying 3rd party DLLs to the output folder when building, I have to collect all 3rd party DLLs in one central folder, separated by platform.

Symbols package not downloaded from symbolsource.org

Hi,

I tried to upload a simple native package to nuget and the symbols package to symbolsource and then install the package and debug it. But I can't since the symbols are not downloaded from symbol source as if the symbols weren't there but they I checked the repository on symbol source and I confirm. I a bit new to all this stuff so I attached my .autopkg file in case there is something wrong in there.

As anyone succeeded in publishing native package built with coapp symbols to symbol source?

nuget
{
    nuspec
    {
        id = mylib_gdumont;
        version : 0.1.0.0;
        title: My Package;
        authors: Guillaume Dumont;      
        licenseUrl: "http://www.apache.org/licenses/LICENSE-2.0";
        projectUrl: "http://www.ino.ca/";     
        iconUrl: "https://download-codeplex.sec.s-msft.com/Download?ProjectName=casablanca&DownloadId=630102&Build=20425"        
        requireLicenseAcceptance:false;
        summary:Stupid Package. ;

        /* if you need to span several lines you can prefix a string with 
         an @ symbol (exactly like c# does). */

         description: @"This is
         description";

        releaseNotes: "Initial version.";
        copyright: Copyright 2013;
        tags: { native, CoApp };
    };

    files
    {        
        nestedInclude: {
            #destination = ${d_include}\mylib;
            "mylib\*"
        };

        source: { src\* };

         ("x64", "v110", "release,debug") => {
                        [${0},${1},${2}] {
                                lib:     { .\build\${0}\${1}\${2}\*.lib };
                                bin:     { .\build\${0}\${1}\${2}\*.dll };
                                symbols: { .\build\${0}\${1}\${2}\*.pdb };
                        };
                };                                    
    };
}

Support option to just create the nuspec files

Currently we use the CoApp cmdlet to generate the nuget spec files, which we later feed Teamcity's NuGet Pack task. As such, every time we want to create/change an autopkg script we need to run Write-Nuget -NoClean package.autopkg, wait for the nupkg to be created and then delete it before committing the changes.

It would be helpful if there would be an option to just create the nuspec files without building the package itself.

The Includes and Defines target/prop dosen't seem to work

Using latest stable release (or the beta) the Defines keyword in the props or targets section doesn't seem to do anything.

   props {
        Includes += "c:\users\fork";
        Defines += "_LATER";
    }        
    targets {
        Includes += "c:\users\fork";
        Defines += "_LATER";
    }

Neither of these appears in any of the three files generated (the xml or targets file), and a #ifdef _LATER never fires in a compiled project. My include files and my libraries are correctly picked up and installed by nuget when I add the package to my project.

BTW, I went looking for source code to see if I could figure out what I was doing wrong, but was unable to find it for the ClrPlus library on github or CodePlex.

Multiple C++ Nuget Packages in one project

I'm attempting to add multiple native NuGet packages into one projects and something seems to not be working right. I've added cpprestsdk, cpprestsdk.redist first and everything is fine. I can #include <http_client.h> and compile. Then I added bzip2 and bzip2.redist but when I attempt to #include <bzlib.h> Visual Studio tells me that it cannot find the file. I also get a LNK2019 error: unresolved external symbol __imp___CrtDbgReportW references in public: static void __cdecl pplx::details::_Task_impl_base::_AsyncInit<...>. If I remove the #include for bzlib.h this goes away and the project compiles again without issue.

I'm using Windows 7 SP1 x64 with Visual Studio 2012 Update 2 and NuGet 2.5.40416.9020.

BuildTimePath doesn't seem to work with custom build tools

I haven't tested the BuildTimePath with anything other than custom build tools, but with them it doesn't seem to work (i.e. it doesn't actually add anything to the PATH envvar).

I created a package with a script such as this one:

files { 
        [x64] {
            tools: "bin2coff64.exe";
        };
        [x86] {
            tools: "bin2coff.exe";
        };
    };

Then I created a C++ project and added a file to the project (with File Type = "Document"). In the file's properties in the project, I specified that it uses a custom build tool (in "Item Type"), and specified the command line "bin2coff".

The build fails with an error message that "bin2coff" is an unknown command. If I replace it with "echo %PATH%" I see that the folder with the tool really hasn't been added to PATH. If I replace "bin2coff" with a full path it works.

Nuspec files generated by CoApp use absolute paths to files

Because the file paths are absolute, it is very difficult to get use the generated configuration files (as produced by Write-NugetPackage -GenerateOnly) on
computer or on a build service.

The paths to files to be packaged from the built project into the nuget package should be given as relative to the generated .nuspec file (as per the Nuget specification).

No warning for failed @import in autopkg file

I added the following line at the top of my autopkg file:

@import "MyFile.autopkg";

Then, although MyFile.autopkg doesn't exist, write-nugetpackage finished successfully without any warnings (though I would even expect a fatal error).

Error In VS when changing linkage (or other) settings for packages with dots in ID

Repro case:

  • Make any package with dots in id (e.g. companyname.libraryname.librarysubname)
  • Add some configuration options or use "static" keyword to show linkage options
  • Install the package
  • Goto project properties, referenced packages, and try to change the settings, press Apply

Result is error message from VS:

An error has occurred while saving the edited properties listed below:
One or more values are invalid. The name "Linkage-companyname.libraryname.librarysubname" contains an invalid character ".".

The name with dots is AFAIK recommended way to name the libraries. The workaround is to use "-" or whatever instead of dots in the name.

Using the @alias keyword in props or targets can cause an infinite loop-like behavior

The following autopkg file is never finished processing by the Write-NuGet powershell command. If the @alias and "ForcedIncludeFiles" are commented out and the w32pragma.h line is uncommented, it seems to work just fine.

nuget {
    nuspec {
        id = ROOT;
        version = 5.34.09.0010;
        title = ROOT;
        authors = {CERN};
        owners = {G. Watts};
        licenseUrl: "http://root.cern.ch/drupal/content/license";
        projectUrl: "http://root.cern.ch";
        iconUrl: "http://root.cern.ch/drupal/sites/default/files/rootdrawing-logo.png";
        requireLicenseAcceptance: false;
        summary: The complete ROOT data analysis toolkit for C++;
        description: Contains all libraries needed for the full set of ROOT utilities;
        releaseNotes: "Release v5.34.09 of ROOT";
        tags: data;
    };

    files {
        include: { "root\include\*"};
        [x86,dynamic] {
            lib: { "root\lib\*.lib" };
            bin: { "root\bin\*.dll" };
        };
    }

    props {
        @alias ForcedIncludeFiles = ItemDefinitionGroup.ClCompile.ForcedIncludeFiles;
        //ItemDefinitionGroup.ClCompile.ForcedIncludeFiles += "w32pragma.h";
        ForcedIncludeFiles += "w32pragma.h";
    }

    targets {
        Defines += "_LATER";
    }
}

Since there is a workaround, this bug is low priority.

Idea on fixing MsBuild

This is all just a spare-time idea, but I thought I'd share it.

I have this idea of patching MsBuild to accept an alternate syntax, mainly because I believe that the power and flexibility in MsBuild is hidden underneath a painful, irritating XML syntax,

I think I can make a transparent patch so that instead of writing scripts like this:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{C417049A-3DA0-4F3B-A561-FEAF4BE53BD3}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>CoApp.Powershell</RootNamespace>
    <AssemblyName>CoApp.Powershell</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <SolutionDir Condition="$(SolutionDir) == '' Or $(SolutionDir) == '*Undefined*'">..\</SolutionDir>
    <SolutionPath Condition="$(SolutionPath) == '' Or $(SolutionPath) == '*Undefined*'">$(SolutionDir)\CoApp.Powershell.sln</SolutionPath>
    <RestorePackages>true</RestorePackages>
  </PropertyGroup>
  <Import Project="$(SolutionPath).props" Condition="Exists('$(SolutionPath).props')" />
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <DefineConstants>$(DefineConstants);DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="CSharpTest.Net.RpcLibrary, Version=2.12.810.409, Culture=neutral, PublicKeyToken=06aee00cce822474, processorArchitecture=MSIL">
      <HintPath>$(SolutionDir)\packages\CSharpTest.Net.RpcLibrary.2.12.810.409\lib\net40\CSharpTest.Net.RpcLibrary.dll</HintPath>
    </Reference>
    <Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\ngit2.2.1.0.20130924\lib\net40\ICSharpCode.SharpZipLib.dll</HintPath>
    </Reference>
    <Reference Include="Ionic.Zip">
      <HintPath>..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\Ionic.Zip.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Build" />
    <Reference Include="Microsoft.Build.Framework" />
    <Reference Include="Microsoft.Build.Tasks.v4.0" />
    <Reference Include="Microsoft.Build.Utilities.v4.0" />
    <Reference Include="Microsoft.Deployment.WindowsInstaller, Version=3.0.0.0, Culture=neutral, PublicKeyToken=ce35f76fcda82bad, processorArchitecture=MSIL">
      <HintPath>..\packages\DTF-Unofficial.3.6.2928\lib\Microsoft.Deployment.WindowsInstaller.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.165.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.WindowsAzure.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\Microsoft.WindowsAzure.ConfigurationManager.2.0.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll</HintPath>
    </Reference>
    <Reference Include="Microsoft.WindowsAzure.Storage, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\WindowsAzure.Storage.3.0.1.0\lib\net40\Microsoft.WindowsAzure.Storage.dll</HintPath>
    </Reference>
    <Reference Include="Mono.Posix, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\ngit2.2.1.0.20130924\lib\net40\Mono.Posix.dll</HintPath>
    </Reference>
    <Reference Include="Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\ngit2.2.1.0.20130924\lib\net40\Mono.Security.dll</HintPath>
    </Reference>
    <Reference Include="Mono.Security.Win32, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\ngit2.2.1.0.20130924\lib\net40\Mono.Security.Win32.dll</HintPath>
    </Reference>
    <Reference Include="MSBuild.ExtensionPack">
      <HintPath>..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.dll</HintPath>
    </Reference>
    <Reference Include="MSBuild.ExtensionPack.Git">
      <HintPath>..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.Git.dll</HintPath>
    </Reference>
    <Reference Include="MSBuild.ExtensionPack.Loggers">
      <HintPath>..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.Loggers.dll</HintPath>
    </Reference>
    <Reference Include="MSBuild.ExtensionPack.TaskFactory.PowerShell">
      <HintPath>..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.TaskFactory.PowerShell.dll</HintPath>
    </Reference>
    <Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
      <HintPath>..\packages\Newtonsoft.Json.5.0.8\lib\net40\Newtonsoft.Json.dll</HintPath>
    </Reference>
    <Reference Include="NGit, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\ngit2.2.1.0.20130924\lib\net40\NGit.dll</HintPath>
    </Reference>
    <Reference Include="NSch, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\ngit2.2.1.0.20130924\lib\net40\NSch.dll</HintPath>
    </Reference>
    <Reference Include="Sharpen, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\ngit2.2.1.0.20130924\lib\net40\Sharpen.dll</HintPath>
    </Reference>
    <Reference Include="Sharpen.Unix, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\ngit2.2.1.0.20130924\lib\net40\Sharpen.Unix.dll</HintPath>
    </Reference>
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="System.Data.Services.Client" />
    <Reference Include="System.IO">
      <HintPath>..\packages\Microsoft.Bcl.1.1.6\lib\net40\System.IO.dll</HintPath>
    </Reference>
    <Reference Include="System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll</HintPath>
    </Reference>
    <Reference Include="System.Net" />
    <Reference Include="System.Runtime">
      <HintPath>..\packages\Microsoft.Bcl.1.1.6\lib\net40\System.Runtime.dll</HintPath>
    </Reference>
    <Reference Include="System.Runtime.Serialization" />
    <Reference Include="System.Threading.Tasks">
      <HintPath>..\packages\Microsoft.Bcl.1.1.6\lib\net40\System.Threading.Tasks.dll</HintPath>
    </Reference>
    <Reference Include="System.Xml.Linq" />
    <Reference Include="System.Data.DataSetExtensions" />
    <Reference Include="Microsoft.CSharp" />
    <Reference Include="System.Data" />
    <Reference Include="System.Xml" />
    <Reference Include="System" />
    <Reference Include="System.Core" />
    <Reference Include="WindowsBase" />
  </ItemGroup>
  <ItemGroup>
    <Compile Include="$(SolutionDir)\common\AssemblyStrongName.cs" />
    <Compile Include="Commands\ConvertFrom-VcxProject.cs" />
    <Compile Include="Commands\GetPublicCertificate.cs" />
    <Compile Include="Commands\InvokeBuildCmdlet.cs" />
    <Compile Include="Commands\NewBuildinfoCmdlet.cs" />
    <Compile Include="Commands\NewSolution.cs" />
    <Compile Include="Commands\NewVcxProject.cs" />
    <Compile Include="Commands\PublishNuGetPackage.cs" />
    <Compile Include="Commands\SetCodeSignature.cs" />
    <Compile Include="Commands\ShowCoAppToolsVersion.cs" />
    <Compile Include="Commands\UpdateCoAppTools.cs" />
    <Compile Include="Commands\WriteNugetPackage.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
    <Compile Include="Signers\AuthenticodeSigner.cs" />
    <Compile Include="Signers\OPCSigner.cs" />
  </ItemGroup>
  <ItemGroup>
    <None Include="app.config" />
    <None Include="etc\common-footer.vcxproj">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
    <None Include="etc\common-header.vcxproj">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
    <None Include="etc\common-overrides.vcxproj">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="etc\common-variables.vcxproj">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
    <None Include="etc\MSBuild.ExtensionPack.tasks">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
    <None Include="etc\nuget-overlay.cmd">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="etc\PackageScriptTemplate.autopkg">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="etc\PackageScriptTemplate_ltcg.autopkg">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="etc\PackageScriptTemplate_static.autopkg">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="etc\Pivots.properties">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="etc\template-project.vcxproj">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
    <None Include="etc\vc10.toolinfo">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="etc\vc11.toolinfo">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="etc\vc12.toolinfo">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="SigningService.psm1">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="CoApp.psd1">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="packages.config" />
  </ItemGroup>
  <ItemGroup>
    <None Include="etc\vcxproj.inc">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
    <None Include="etc\autopackage.targets" />
    <None Include="CoApp.Powershell.Tools.dll-help.xml">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <SubType>Designer</SubType>
    </None>
    <None Include="etc\default_tools">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Include="etc\buildinfo-template">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <Content Include="etc\NuGet.exe">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\clrplus\Core\Core.csproj">
      <Project>{C8506264-EE4F-442C-B2C3-4C0BD4975A2A}</Project>
      <Name>Core</Name>
    </ProjectReference>
    <ProjectReference Include="..\clrplus\Platform\Platform.csproj">
      <Project>{bd607d7f-ad3f-4819-b1e5-f6a01d3cde1c}</Project>
      <Name>Platform</Name>
    </ProjectReference>
    <ProjectReference Include="..\clrplus\Powershell.Azure\Powershell.Azure.csproj">
      <Project>{b172ee7f-7e84-4111-992c-e3a125e194f6}</Project>
      <Name>Powershell.Azure</Name>
    </ProjectReference>
    <ProjectReference Include="..\clrplus\Powershell.Core\Powershell.Core.csproj">
      <Project>{DF38AA27-E211-4A3C-A3AB-ADD32347A25A}</Project>
      <Name>Powershell.Core</Name>
    </ProjectReference>
    <ProjectReference Include="..\clrplus\Powershell.Provider\Powershell.Provider.csproj">
      <Project>{b444dab8-9a7e-4b87-be31-b1a565964786}</Project>
      <Name>Powershell.Provider</Name>
    </ProjectReference>
    <ProjectReference Include="..\clrplus\Scripting.MsBuild\Scripting.MsBuild.csproj">
      <Project>{123467A0-2FCE-43F8-9814-0EB1F6C91234}</Project>
      <Name>Scripting.MsBuild</Name>
    </ProjectReference>
    <ProjectReference Include="..\clrplus\Scripting\Scripting.csproj">
      <Project>{1F5667A0-2FCE-43F8-9814-0EB1F6C9D8DC}</Project>
      <Name>Scripting</Name>
    </ProjectReference>
    <ProjectReference Include="..\clrplus\Windows.PeBinary\Windows.PeBinary.csproj">
      <Project>{B1BD48CC-CAAE-4D32-A011-C77BB23DF156}</Project>
      <Name>Windows.PeBinary</Name>
    </ProjectReference>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <PropertyGroup>
    <AssemblySearchPaths>$(AssemblySearchPaths)</AssemblySearchPaths>
  </PropertyGroup>
  <PropertyGroup>
  </PropertyGroup>
  <PropertyGroup>
    <PreBuildEvent>
    </PreBuildEvent>
  </PropertyGroup>
  <PropertyGroup>
    <PostBuildEvent>
set TOOLSDIR=$(SolutionDir)\tools
set NODE_PATH=%25TOOLSDIR%25\node
path = %25TOOLSDIR%25;%25NODE_PATH%25\node_modules\.bin;%25PATH%25

cd $(TargetDir)


if '$(ConfigurationName)' == 'Release'   goto RELEASE

:DEBUG

powershell Set-content coapp.psd1 ((Get-Content coapp.psd1).Replace('CoApp.Powershell.Tools.dll','coapp.powershell.dll') )

goto common

:RELEASE 
  $(SolutionDir)\tools\il-repack.exe   /targetplatform:v4 /lib:. /lib:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /lib:"C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0" /parallel /union /out:CoApp.Powershell.Tools.dll CoApp.Powershell.dll ClrPlus.Core.dll ClrPlus.Platform.dll ClrPlus.Powershell.Azure.dll ClrPlus.Powershell.Core.dll ClrPlus.Powershell.Provider.dll ClrPlus.Scripting.dll ClrPlus.Scripting.MsBuild.dll ClrPlus.Windows.Api.dll ClrPlus.Windows.PeBinary.dll Microsoft.Cci.Analysis.ControlAndDataFlowGraph.dll Microsoft.Cci.AstsProjectedAsCodeModel.dll Microsoft.Cci.CodeModel.dll Microsoft.Cci.CodeModelToIL.dll Microsoft.Cci.ContractExtractor.dll Microsoft.Cci.CSharpSourceEmitter.dll Microsoft.Cci.ILGenerator.dll Microsoft.Cci.MetadataHelper.dll Microsoft.Cci.MetadataModel.dll Microsoft.Cci.MutableCodeModel.dll Microsoft.Cci.MutableMetadataModel.dll Microsoft.Cci.NewILToCodeModel.dll Microsoft.Cci.PdbReader.dll Microsoft.Cci.PdbWriter.dll Microsoft.Cci.PeReader.dll Microsoft.Cci.PeWriter.dll Microsoft.Cci.ReflectionEmitter.dll Microsoft.Cci.SourceEmitter.dll Microsoft.Cci.SourceModel.dll Microsoft.Threading.Tasks.dll Microsoft.Threading.Tasks.Extensions.dll Microsoft.Threading.Tasks.Extensions.Desktop.dll System.Runtime.dll System.Threading.Tasks.dll Microsoft.WindowsAzure.Configuration.dll Microsoft.WindowsAzure.Storage.dll Microsoft.Deployment.WindowsInstaller.dll CSScriptLibrary.dll Mono.CSharp.dll Ionic.Zip.dll MSBuild.ExtensionPack.dll MSBuild.ExtensionPack.Git.dll MSBuild.ExtensionPack.Loggers.dll MSBuild.ExtensionPack.TaskFactory.PowerShell.dll Sharpen.dll  ICSharpCode.SharpZipLib.dll NGit.dll NSch.dll CSharpTest.Net.RpcLibrary.dll Mono.Security.dll Microsoft.Data.Edm.dll Microsoft.Data.OData.dll Microsoft.Data.Services.Client.dll Newtonsoft.Json.dll  Interop.COMAdmin.dll Interop.IWshRuntimeLibrary.dll


REM EmbedAssemblyAsResource CoApp.Powershell.Tools.dll ClrPlus.Core.dll ClrPlus.Platform.dll ClrPlus.Powershell.Azure.dll ClrPlus.Powershell.Core.dll ClrPlus.Powershell.Provider.dll ClrPlus.Scripting.dll ClrPlus.Scripting.MsBuild.dll ClrPlus.Windows.Api.dll ClrPlus.Windows.PeBinary.dll Microsoft.Cci.Analysis.ControlAndDataFlowGraph.dll Microsoft.Cci.AstsProjectedAsCodeModel.dll Microsoft.Cci.CodeModel.dll Microsoft.Cci.CodeModelToIL.dll Microsoft.Cci.ContractExtractor.dll Microsoft.Cci.CSharpSourceEmitter.dll Microsoft.Cci.ILGenerator.dll Microsoft.Cci.MetadataHelper.dll Microsoft.Cci.MetadataModel.dll Microsoft.Cci.MutableCodeModel.dll Microsoft.Cci.MutableMetadataModel.dll Microsoft.Cci.NewILToCodeModel.dll Microsoft.Cci.PdbReader.dll Microsoft.Cci.PdbWriter.dll Microsoft.Cci.PeReader.dll Microsoft.Cci.PeWriter.dll Microsoft.Cci.ReflectionEmitter.dll Microsoft.Cci.SourceEmitter.dll Microsoft.Cci.SourceModel.dll Microsoft.Threading.Tasks.dll Microsoft.Threading.Tasks.Extensions.dll Microsoft.Threading.Tasks.Extensions.Desktop.dll System.Runtime.dll System.Threading.Tasks.dll Microsoft.WindowsAzure.Configuration.dll Microsoft.WindowsAzure.Storage.dll Microsoft.Deployment.WindowsInstaller.dll CSScriptLibrary.dll Mono.CSharp.dll Ionic.Zip.dll MSBuild.ExtensionPack.dll MSBuild.ExtensionPack.Git.dll MSBuild.ExtensionPack.Loggers.dll MSBuild.ExtensionPack.TaskFactory.PowerShell.dll Sharpen.dll  ICSharpCode.SharpZipLib.dll NGit.dll NSch.dll CSharpTest.Net.RpcLibrary.dll Mono.Security.dll Microsoft.Data.Edm.dll Microsoft.Data.OData.dll Microsoft.Data.Services.Client.dll Newtonsoft.Json.dll 

"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\CoApp.Powershell.Tools.dll
"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\CoApp.psd1
"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\SigningService.psm1

"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\CoApp.NuGetNativeExtensions.dll
"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\CoApp.NuGetNativeMSBuildTasks.dll

:common 

copy /y $(TargetDir)\CoApp.NuGetNativeExtensions.* $(TargetDir)\etc
copy /y $(TargetDir)\CoApp.NuGetNativeMSBuildTasks.* $(TargetDir)\etc
copy /y "$(TargetDir)\etc\CoApp.NuGetNativeMSBuildTasks.dll" "$(TargetDir)\etc\CoApp.NuGetNativeMSBuildTasks.dll.orig"</PostBuildEvent>
  </PropertyGroup>
  <Import Project="..\packages\Microsoft.Bcl.Build.1.0.13\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.13\tools\Microsoft.Bcl.Build.targets')" />
  <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
    <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.13\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
    <Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.13\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
  </Target>
  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
       Other similar extension points exist, see Microsoft.Common.targets.
  <Target Name="BeforeBuild">
  </Target>
  <Target Name="AfterBuild">
  </Target>
  -->
</Project>

You can write them in a C-like structure like this:

(ToolsVersion:4.0, DefaultTargets:Build);

#TryImport $(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props;

Configuration?=Debug;
Platform?=AnyCPU;
ProjectGuid="{C417049A-3DA0-4F3B-A561-FEAF4BE53BD3}";
OutputType=Library;
AppDesignerFolder=Properties;
RootNamespace=CoApp.Powershell;
AssemblyName=CoApp.Powershell;
TargetFrameworkVersion=v4.0;
FileAlignment=512;
SolutionDir?=..\;
SolutionPath?=$(SolutionDir)\CoApp.Powershell.sln;
RestorePackages?=true;

#TryImport $(SolutionPath).props;

if( '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ) {
    DebugSymbols=true;
    DebugType=full;
    Optimize=false;
    DefineConstants=+ { 
        DEBUG,
        TRACE
    };
    ErrorReport=prompt;
    WarningLevel=4;
}

if( '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ) {
    DebugType=pdbonly;
    Optimize=true;
    DefineConstants=TRACE;
    ErrorReport=prompt;
    WarningLevel=4;
}
Reference {
    "CSharpTest.Net.RpcLibrary, Version=2.12.810.409, Culture=neutral, PublicKeyToken=06aee00cce822474, processorArchitecture=MSIL" 
        { HintPath=$(SolutionDir)\packages\CSharpTest.Net.RpcLibrary.2.12.810.409\lib\net40\CSharpTest.Net.RpcLibrary.dll },
    "CSharpTest.Net.RpcLibrary, Version=2.12.810.409, Culture=neutral, PublicKeyToken=06aee00cce822474, processorArchitecture=MSIL"
        { SpecificVersion=False, HintPath=..\packages\ngit2.2.1.0.20130924\lib\net40\ICSharpCode.SharpZipLib.dll },
    Ionic.Zip
        { HintPath=..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\Ionic.Zip.dll }
    Microsoft.Build,
    Microsoft.Build.Framework,
    Microsoft.Build.Tasks.v4.0,
    Microsoft.Build.Utilities.v4.0,

    "Microsoft.Deployment.WindowsInstaller, Version=3.0.0.0, Culture=neutral, PublicKeyToken=ce35f76fcda82bad, processorArchitecture=MSIL"
      {  HintPath=..\packages\DTF-Unofficial.3.6.2928\lib\Microsoft.Deployment.WindowsInstaller.dll },

    "Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.dll },

    "Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.Extensions.dll },

    "Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.165.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\Microsoft.Bcl.Async.1.0.165\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll },

    "Microsoft.WindowsAzure.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\Microsoft.WindowsAzure.ConfigurationManager.2.0.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll },

    "Microsoft.WindowsAzure.Storage, Version=3.0.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\WindowsAzure.Storage.3.0.1.0\lib\net40\Microsoft.WindowsAzure.Storage.dll },

    "Mono.Posix, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\ngit2.2.1.0.20130924\lib\net40\Mono.Posix.dll },

    "Mono.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\ngit2.2.1.0.20130924\lib\net40\Mono.Security.dll },

    "Mono.Security.Win32, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
      { SpecificVersion False, HintPath=..\packages\ngit2.2.1.0.20130924\lib\net40\Mono.Security.Win32.dll },

    "MSBuild.ExtensionPack"
      { HintPath=..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.dll },

    "MSBuild.ExtensionPack.Git"
      { HintPath=..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.Git.dll },

    "MSBuild.ExtensionPack.Loggers"
      { HintPath=..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.Loggers.dll },

    "MSBuild.ExtensionPack.TaskFactory.PowerShell"
      { HintPath=..\packages\MSBuild.Extension.Pack.1.3.0\tools\net40\MSBuild.ExtensionPack.TaskFactory.PowerShell.dll },

    "Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"
      { HintPath=..\packages\Newtonsoft.Json.5.0.8\lib\net40\Newtonsoft.Json.dll },

    "NGit, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\ngit2.2.1.0.20130924\lib\net40\NGit.dll },

    "NSch, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\ngit2.2.1.0.20130924\lib\net40\NSch.dll },

    "Sharpen, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\ngit2.2.1.0.20130924\lib\net40\Sharpen.dll },

    "Sharpen.Unix, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\packages\ngit2.2.1.0.20130924\lib\net40\Sharpen.Unix.dll },

    System ,
    System.Core ,
    System.Data.Services.Client ,
    System.IO,
      { SpecificVersion False, HintPath=..\packages\Microsoft.Bcl.1.1.6\lib\net40\System.IO.dll },

    "System.Management.Automation, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"
      { SpecificVersion False, HintPath=..\..\..\..\..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0\System.Management.Automation.dll },

    System.Net ,
    System.Runtime
      { SpecificVersion False, HintPath=..\packages\Microsoft.Bcl.1.1.6\lib\net40\System.Runtime.dll },

    System.Runtime.Serialization,
    System.Threading.Tasks
      { SpecificVersion False, HintPath=..\packages\Microsoft.Bcl.1.1.6\lib\net40\System.Threading.Tasks.dll },

    System.Xml.Linq ,
    System.Data.DataSetExtensions ,
    Microsoft.CSharp ,
    System.Data ,
    System.Xml ,
    System ,
    System.Core ,
    WindowsBase
}

Compile {
    $(SolutionDir)\common\AssemblyStrongName.cs,
    Commands\ConvertFrom-VcxProject.cs,
    Commands\GetPublicCertificate.cs,
    Commands\InvokeBuildCmdlet.cs,
    Commands\NewBuildinfoCmdlet.cs,
    Commands\NewSolution.cs,
    Commands\NewVcxProject.cs,
    Commands\PublishNuGetPackage.cs,
    Commands\SetCodeSignature.cs,
    Commands\ShowCoAppToolsVersion.cs,
    Commands\UpdateCoAppTools.cs,
    Commands\WriteNugetPackage.cs,
    Properties\AssemblyInfo.cs,
    Signers\AuthenticodeSigner.cs,
    Signers\OPCSigner.cs
}

None {
    app.config,
    etc\common-footer.vcxproj 
        { CopyToOutputDirectory=PreserveNewest; SubType=Designer },
    etc\common-header.vcxproj
        { CopyToOutputDirectory=PreserveNewest; SubType=Designer },
    etc\common-overrides.vcxproj
        { CopyToOutputDirectory=PreserveNewest; SubType=Designer },
    etc\common-variables.vcxproj
        { CopyToOutputDirectory=PreserveNewest; SubType=Designer },    
    etc\MSBuild.ExtensionPack.tasks
        { CopyToOutputDirectory=PreserveNewest; SubType=Designer },
    etc\nuget-overlay.cmd
        { CopyToOutputDirectory=PreserveNewest },
    etc\PackageScriptTemplate.autopkg
        { CopyToOutputDirectory=PreserveNewest },
    etc\PackageScriptTemplate_ltcg.autopkg
        { CopyToOutputDirectory=PreserveNewest },
    etc\PackageScriptTemplate_static.autopkg
        { CopyToOutputDirectory=PreserveNewest },
    etc\Pivots.properties
        { CopyToOutputDirectory=PreserveNewest },
    etc\template-project.vcxproj
        { CopyToOutputDirectory=PreserveNewest; SubType=Designer },
    etc\vc10.toolinfo
        { CopyToOutputDirectory=PreserveNewest },
    etc\vc11.toolinfo
        { CopyToOutputDirectory=PreserveNewest },
    etc\vc12.toolinfo
        { CopyToOutputDirectory=PreserveNewest },
    SigningService.psm1
        { CopyToOutputDirectory=PreserveNewest },
    CoApp.psd1
        { CopyToOutputDirectory=PreserveNewest },
    packages.config,
    etc\vcxproj.inc
        { CopyToOutputDirectory=PreserveNewest; SubType=Designer },
    etc\autopackage.targets,
    CoApp.Powershell.Tools.dll-help.xml,
        { CopyToOutputDirectory=PreserveNewest; SubType=Designer },
    etc\default_tools
        { CopyToOutputDirectory=PreserveNewest },
    etc\buildinfo-template
        { CopyToOutputDirectory=PreserveNewest },
}

Content {
    etc\NuGet.exe 
        { CopyToOutputDirectory=PreserveNewest }
}

ProjectReference {
    ..\clrplus\Core\Core.csproj
      { Project="{C8506264-EE4F-442C-B2C3-4C0BD4975A2A}"; Name=Core },
    ..\clrplus\Platform\Platform.csproj
      { Project="{bd607d7f-ad3f-4819-b1e5-f6a01d3cde1c}"; Name=Platform },
    ..\clrplus\Powershell.Azure\Powershell.Azure.csproj
      { Project="{b172ee7f-7e84-4111-992c-e3a125e194f6}"; Name=Powershell.Azure },
    ..\clrplus\Powershell.Core\Powershell.Core.csproj
      { Project="{DF38AA27-E211-4A3C-A3AB-ADD32347A25A}"; Name=Powershell.Core },
    ..\clrplus\Powershell.Provider\Powershell.Provider.csproj
      { Project="{b444dab8-9a7e-4b87-be31-b1a565964786}"; Name=Powershell.Provider },
    ..\clrplus\Scripting.MsBuild\Scripting.MsBuild.csproj
      { Project="{123467A0-2FCE-43F8-9814-0EB1F6C91234}"; Name=Scripting.MsBuild },
    ..\clrplus\Scripting\Scripting.csproj
      { Project="{1F5667A0-2FCE-43F8-9814-0EB1F6C9D8DC}"; Name=Scripting },
    ..\clrplus\Windows.PeBinary\Windows.PeBinary.csproj
      { Project="{B1BD48CC-CAAE-4D32-A011-C77BB23DF156}"; Name=Windows.PeBinary }
}

#Import $(MSBuildToolsPath)\Microsoft.CSharp.targets;
#TryImport $(SolutionDir)\.nuget\NuGet.targets;

PostBuildEvent=@"
set TOOLSDIR=$(SolutionDir)\tools
set NODE_PATH=%25TOOLSDIR%25\node
path = %25TOOLSDIR%25;%25NODE_PATH%25\node_modules\.bin;%25PATH%25

cd $(TargetDir)


if '$(ConfigurationName)' == 'Release'   goto RELEASE

:DEBUG

powershell Set-content coapp.psd1 ((Get-Content coapp.psd1).Replace('CoApp.Powershell.Tools.dll','coapp.powershell.dll') )

goto common

:RELEASE 
  $(SolutionDir)\tools\il-repack.exe   /targetplatform:v4 /lib:. /lib:""C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"" /lib:""C:\Program Files (x86)\Reference Assemblies\Microsoft\WindowsPowerShell\3.0"" /parallel /union /out:CoApp.Powershell.Tools.dll CoApp.Powershell.dll ClrPlus.Core.dll ClrPlus.Platform.dll ClrPlus.Powershell.Azure.dll ClrPlus.Powershell.Core.dll ClrPlus.Powershell.Provider.dll ClrPlus.Scripting.dll ClrPlus.Scripting.MsBuild.dll ClrPlus.Windows.Api.dll ClrPlus.Windows.PeBinary.dll Microsoft.Cci.Analysis.ControlAndDataFlowGraph.dll Microsoft.Cci.AstsProjectedAsCodeModel.dll Microsoft.Cci.CodeModel.dll Microsoft.Cci.CodeModelToIL.dll Microsoft.Cci.ContractExtractor.dll Microsoft.Cci.CSharpSourceEmitter.dll Microsoft.Cci.ILGenerator.dll Microsoft.Cci.MetadataHelper.dll Microsoft.Cci.MetadataModel.dll Microsoft.Cci.MutableCodeModel.dll Microsoft.Cci.MutableMetadataModel.dll Microsoft.Cci.NewILToCodeModel.dll Microsoft.Cci.PdbReader.dll Microsoft.Cci.PdbWriter.dll Microsoft.Cci.PeReader.dll Microsoft.Cci.PeWriter.dll Microsoft.Cci.ReflectionEmitter.dll Microsoft.Cci.SourceEmitter.dll Microsoft.Cci.SourceModel.dll Microsoft.Threading.Tasks.dll Microsoft.Threading.Tasks.Extensions.dll Microsoft.Threading.Tasks.Extensions.Desktop.dll System.Runtime.dll System.Threading.Tasks.dll Microsoft.WindowsAzure.Configuration.dll Microsoft.WindowsAzure.Storage.dll Microsoft.Deployment.WindowsInstaller.dll CSScriptLibrary.dll Mono.CSharp.dll Ionic.Zip.dll MSBuild.ExtensionPack.dll MSBuild.ExtensionPack.Git.dll MSBuild.ExtensionPack.Loggers.dll MSBuild.ExtensionPack.TaskFactory.PowerShell.dll Sharpen.dll  ICSharpCode.SharpZipLib.dll NGit.dll NSch.dll CSharpTest.Net.RpcLibrary.dll Mono.Security.dll Microsoft.Data.Edm.dll Microsoft.Data.OData.dll Microsoft.Data.Services.Client.dll Newtonsoft.Json.dll  Interop.COMAdmin.dll Interop.IWshRuntimeLibrary.dll


REM EmbedAssemblyAsResource CoApp.Powershell.Tools.dll ClrPlus.Core.dll ClrPlus.Platform.dll ClrPlus.Powershell.Azure.dll ClrPlus.Powershell.Core.dll ClrPlus.Powershell.Provider.dll ClrPlus.Scripting.dll ClrPlus.Scripting.MsBuild.dll ClrPlus.Windows.Api.dll ClrPlus.Windows.PeBinary.dll Microsoft.Cci.Analysis.ControlAndDataFlowGraph.dll Microsoft.Cci.AstsProjectedAsCodeModel.dll Microsoft.Cci.CodeModel.dll Microsoft.Cci.CodeModelToIL.dll Microsoft.Cci.ContractExtractor.dll Microsoft.Cci.CSharpSourceEmitter.dll Microsoft.Cci.ILGenerator.dll Microsoft.Cci.MetadataHelper.dll Microsoft.Cci.MetadataModel.dll Microsoft.Cci.MutableCodeModel.dll Microsoft.Cci.MutableMetadataModel.dll Microsoft.Cci.NewILToCodeModel.dll Microsoft.Cci.PdbReader.dll Microsoft.Cci.PdbWriter.dll Microsoft.Cci.PeReader.dll Microsoft.Cci.PeWriter.dll Microsoft.Cci.ReflectionEmitter.dll Microsoft.Cci.SourceEmitter.dll Microsoft.Cci.SourceModel.dll Microsoft.Threading.Tasks.dll Microsoft.Threading.Tasks.Extensions.dll Microsoft.Threading.Tasks.Extensions.Desktop.dll System.Runtime.dll System.Threading.Tasks.dll Microsoft.WindowsAzure.Configuration.dll Microsoft.WindowsAzure.Storage.dll Microsoft.Deployment.WindowsInstaller.dll CSScriptLibrary.dll Mono.CSharp.dll Ionic.Zip.dll MSBuild.ExtensionPack.dll MSBuild.ExtensionPack.Git.dll MSBuild.ExtensionPack.Loggers.dll MSBuild.ExtensionPack.TaskFactory.PowerShell.dll Sharpen.dll  ICSharpCode.SharpZipLib.dll NGit.dll NSch.dll CSharpTest.Net.RpcLibrary.dll Mono.Security.dll Microsoft.Data.Edm.dll Microsoft.Data.OData.dll Microsoft.Data.Services.Client.dll Newtonsoft.Json.dll 

""C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe"" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\CoApp.Powershell.Tools.dll
""C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe"" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\CoApp.psd1
""C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe"" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\SigningService.psm1

""C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe"" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\CoApp.NuGetNativeExtensions.dll
""C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe"" sign /a /t http://timestamp.verisign.com/scripts/timstamp.dll $(TargetDir)\CoApp.NuGetNativeMSBuildTasks.dll

:common 

copy /y $(TargetDir)\CoApp.NuGetNativeExtensions.* $(TargetDir)\etc
copy /y $(TargetDir)\CoApp.NuGetNativeMSBuildTasks.* $(TargetDir)\etc
copy /y ""$(TargetDir)\etc\CoApp.NuGetNativeMSBuildTasks.dll"" ""$(TargetDir)\etc\CoApp.NuGetNativeMSBuildTasks.dll.orig""";

#TryImport ..\packages\Microsoft.Bcl.Build.1.0.13\tools\Microsoft.Bcl.Build.targets";

if( '$(BclBuildImported)' == '' )  {
    EnsureBclBuildImported( BeforeTargets:BeforeBuild ) {
        if( !Exists('..\packages\Microsoft.Bcl.Build.1.0.13\tools\Microsoft.Bcl.Build.targets') ) {
            Error( Text:"This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567.", HelpKeyword:"BCLBUILD2001" );
            Error( Text:"The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568.", HelpKeyword:"BCLBUILD2002" ); 
        }
    }
}  

"include" files are listed multiple times in nuspec file

Using Write-NugetPacakge -GenerateOnly generates a nuspec file where each include header is listed multiple times.

I've seen files where each header is listed twice and files where there are 3 duplicated listings - this may be related to the way we specify includes:

  • An autopkg spec that uses nuget { nuspec { files { includes: { ... } } } } generates two duplicate listings
  • An autopkg spec that uses nuget { nuspec { files { nestedInclude: { #destination = ...; ... } } } } generates three duplicate listings

but this may be inaccurate - I don't have enough instances yet to tell.

Allow importing .targets / .props files

I would like to be able to add an external .targets or .props file to my package and have it imported into consuming projects. It may or may not already be possible, but if it is I couldn't figure out how.

Write-NuGetPackage: Add ability to specify one or more pivots to create from an .autopkg file

There are at least two use cases for this:

  1. Creating a NuGet package during normal build with MSBuild/Visual Studio

    When I build from Visual Studio, I am only building a single pivot configuration. To be able to reuse a single .autopkg file for everything, I will need to specify (with Visual Studio variables) which pivot configuration I have built, and will be creating a NuGet package for.

    Example: Write-NuGetPackage projectA.autopkg -SelectPivot $(DefaultPlatformToolset) $(Platform) $(Configuration) $(ConfigurationType)

    Evaluates to e.g. : Write-NuGetPackage projectA.autopkg -SelectPivot v120 Win32 Debug DynamicLibrary

    (I realise that DynamicLibrary isn't currently an alias of dynamic Linkage pivot)

  2. Flexibility during CI / nightly build

    When I build all projects using a build server, I sometimes want to exclude a pivot configuration temporarily, while still using a single .autopkg file for everything.

    Example. : Write-NuGetPackage projectA.autopkg -SelectPivot v120 Win32 Debug DynamicLibrary -SelectPivot v120 Win32 Release DynamicLibrary

    With a lot of pivots, it would be convenient to be able to exclude pivot configurations as well.

NativeExtension command cannot install a specific overlay

The NuGet-Overlay.cmd extension does not allow to install single overlays.

In situations where an overlay identifier is a subset of other overlays (e.g. Win32_v110 is a subset of both Win32_v110_Release and Win32_v110_Debug) all of them will be installed by NuGet-Overlay, when only the first pivot identifier is given.

This is inconsistent with MSBuild Task behavior where a single overlay can be specified and installed directly. There should be a way to specify installation of a single specific overlay in the NativeExtension command, to make it consistent with the MSBuild Task.

Include directories not added to consuming project

Include directories are not automatically included in the consuming project with coapp powershell v2.4.4.425 as it was in the release version.

[Edit]

I found that this bug happens only when we use the nested include feature. If I create a package with

nestedInclude: {
        #destination = ${d_include}\mylib;
        "root\mylib\*"
    };

then no AdditionalIncludeDirectories is added to the targets file.

    nestedInclude: {
        #destination = ${d_include}\mylib;
        "root\mylib\*"
    };

    include: { "root\*" };

and there is at least one file in root the AdditionalIncludeDirectories is properly added to the targets file.

Parse error on empty literal strings.

The following string will be incorrectly parsed by these tools and will be treated as only opening a string literal:

string = @"";  // this comment is still part of the string.
// still going.  ";  // the string is now closed.

Requested: possibility to rename a file in the package

When including a file in the package (by name and not by wildcards), please let me specify a different target name for the file (the name by which it goes into the package and is distributed to package consumers). This is in the spirit of similar functionality provided by various installer makers.

Specifically, I need this for a .txt file I have to add to the package with "redist: ". I cannot rename the original file, and I need the file to be distributed to package consumers with a different name.

When loading the backup nuget package, warn user

Between the "rebuilding All started:..." and "main.cpp" lines there is a very long wait:

NuGet package restore started.
All packages are already installed and there is nothing to restore.
NuGet package restore finished.
1>------ Rebuild All started: Project: SimpleStandaloneROOTPackageTest, Configuration: Debug Win32 ------
1>  main.cpp
1>  SimpleStandaloneROOTPackageTest.vcxproj -> C:\Users\Gordon\Documents\Code\TestOutCPPPackages\Debug\SimpleStandaloneROOTPackageTest.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

This wait is, I think, due to the build infrastructure getting and downloading the overlay package. It would be great if some line was printed out - especially if it has to go online to fetch the package, it can hang for a while.

Option to exclude files and/or specify more complex patterns

When specifying files to include in a package, the simple wildcard (*) support may not be enough. It is very common for libraries (e.g. Qt) to have a different filename, and not a different folder, for debug libraries or DLLs (usually "d" is appended somewhere in the filename, either before or after the version number). This makes it very hard, or rather impossible, to create a pattern which will include the release binaries (which do not have a particular suffix).

One possible solution - an option to add an exclusion pattern, i.e. something like "add .dll except d.dll". Another possible solution - make the pattern (optionally) a regular expression.

Matrix expansion fails in Write-NuGetPackage

v 1.23.196

The following code snippet will throw an exception (assuming the required nuspec section is provided):

nuget {
files { 
("Win32,x64", "v100,v110") => {
};
};
};

The exception and stacktrace are included below. The line and character number below reflect the code snippet above.

(3,8):Error TokenNotExpected:Invalid token in selector declaration--found ', '

   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseSelector(IEnumerable`1 terminators, SourceLocation sourceLocation, String selectorName, String parameter)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseSelector(IEnumerable`1 terminators, SourceLocation sourceLocation, String selectorName, String parameter)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.ParseItemsInDictionary(ObjectNode context, Continuation onComplete, Boolean justOneItem, String prefix)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.Global(Continuation onComplete)
   at ClrPlus.Scripting.Languages.PropertySheetV3.PropertySheetParser.Global(Continuation onComplete)
   at ClrPlus.Scripting.Languages.PropertySheetV3.RootPropertySheet.ParseText(String propertySheetText, String originalFilename)
   at ClrPlus.Scripting.MsBuild.Packaging.PackageScript..ctor(String filename)
   at CoApp.Powershell.Commands.WriteNuGetPackage.ProcessRecord()
   at System.Management.Automation.CommandProcessor.ProcessRecord()

Character sets are another kind of useful pivots

Many C++ libraries have separate project configurations for ANSI/Unicode/Multibyte character sets. I think it would be useful to be able to create conditions based on the project character set out-of-the-box.

If I understand correctly, the _UNICODE and _MBCS defines are to be used to detect the character set.

Specify deep directory structure for "content" files in C++ nuget pacakges

I have a C++ library that requires a specific directory structure for data files. The root of these files should be the same location as the executable. Current the tool seems to only allow top level files, though it will maintain a deep directory structure in the nuget package itself.

Below is a autopkg file, which specifies files in the "etc" directory. I would like them, after build, to appear in an etc folder that sits next to the .exe (or whatever) is built. Currently all files, no matter how deep inside the etc directory, appear at the top level, right next to the build project executable.

Somehow I need an argument to CopyToOutput that will keep the folder structure...

    nuget {
        nuspec {
            id = ROOT;
            version = 5.34.09.0018;
            title = ROOT;
            authors = {CERN};
            owners = {G. Watts};
            licenseUrl: "http://root.cern.ch/drupal/content/license";
            projectUrl: "http://root.cern.ch";
            iconUrl: "http://root.cern.ch/drupal/sites/default/files/rootdrawing-logo.png";
            requireLicenseAcceptance: false;
            summary: The complete ROOT data analysis toolkit for C++;
            description: Contains all libraries needed for the full set of ROOT utilities;
            releaseNotes: "Release v5.34.09 of ROOT";
            tags: data;
        };

        files {
            etc += {
                #output {
                    package = redist;
                };
                #add-each-file : ::nuget.[redist]targets.[${condition}].CopyToOutput;
                #destination : ${d_bin}\etc;
            };

            include: { "root\include\*"};
            [x86,dynamic] {
                lib: { "root\lib\*.lib" };
                bin: { "root\bin\*.dll" };
                etc: { "root\etc\**\*" };
            };
                    }

        props {
            //@alias ForcedIncludeFiles = ItemDefinitionGroup.ClCompile.ForcedIncludeFiles;
            ItemDefinitionGroup.ClCompile.ForcedIncludeFiles += "w32pragma.h";
            //ForcedIncludeFiles += "w32pragma.h";
        }

        targets {
            Defines += "_LATER";
        }
    }

Allow disabling automatic linking to static libraries

When generating a native NuGet package with Write-NuGetPackage, and when specifying my library's LIB files with "lib:" in the autopkg file, any project that consumes the package will automatically try to link with that lib file (because it is added under "AdditionalDependencies").

This behavior is commonly undesirable - many libraries (e.g. Boost, CGAL) have their own smart auto-linking mechanism built it to their headers, by the means of "#pragma comment" for example. When this is the case, adding the library files to AdditionalDependencies may actually cause linkage errors.

I could not find any way to disable this behavior (while still packaging and distributing the LIB files), and I think there should be.

Nested loops in Invoke-Build

Previous planning called for nested looping to be possible in the ptk replacement. Currently this fails during parse of the inner loop declaration.

Using environment variables in conditions should be possible

My files section looks like this (stripped down but still reproduces the problem):

files {
    [${DEBUG_CONFIG}, x86] {
    };
};

When I replace ${DEBUG_CONFIG} with Debug, which is also defined as a environment variable, i.e. echo $env:DEBUG_CONFIG gives me Debug, it works. But when using the statement for the environment variable as specified above, I get an error:

Write-NuGetPackage : Invalid characters in expression
In Zeile:1 Zeichen:1
+ Write-NuGetPackage .\toolkit_template.autopkg -Verbose
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [Write-NuGetPackage], ClrPlusException
+ FullyQualifiedErrorId : ClrPlus.Core.Exceptions.ClrPlusException,CoApp.Powershell.Commands.WriteNuGetPackage

Could this be a newline issue?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.