diff --git a/Documentation/README.md b/Documentation/README.md
index 8a8388c43..3a88a00f6 100644
--- a/Documentation/README.md
+++ b/Documentation/README.md
@@ -1,6 +1,27 @@
Documents Index
===============
-- [Developer Guide](developer-guide.md)
+## Overview and general information
+
- [Intro to .NET Core CLI](intro-to-cli.md)
-- [Addressing Incremental Compilation Warnings](addressing-incremental-compilation-warnings.md)
+- [CLI UX Guidelines](cli-ux-guidelines.md)
+- [.NET Core native pre-requisities document](https://github.com/dotnet/core/blob/master/Documentation/prereqs.md)
+- [Roadmap and OS support](https://github.com/dotnet/core/blob/master/roadmap.md)
+- [Comprehensive CLI documentation](https://docs.microsoft.com/en-us/dotnet/articles/core/preview3/tools/)
+
+## Working with the CLI repo
+
+- [Developer Guide](project-docs/developer-guide.md)
+- [How to file issues](project-docs/issue-filing.guide.md)
+
+## Troubleshooting and issues reporting
+
+- [CLI Known Issues](https://github.com/dotnet/core/blob/master/cli/known-issues.md)
+- [Filing migration issues](migration-issues.md)
+
+## Specifications
+
+- [CLI installation scenarios](specs/cli-installation-scenarios.md)
+- [Corehost specification](specs/corehost.md)
+- [Runtime configuration file specification](specs/runtime-configuration-file.md)
+
diff --git a/Documentation/addressing-incremental-compilation-warnings.md b/Documentation/addressing-incremental-compilation-warnings.md
deleted file mode 100644
index e2072fe4e..000000000
--- a/Documentation/addressing-incremental-compilation-warnings.md
+++ /dev/null
@@ -1,17 +0,0 @@
-Addressing Incremental Compilation Warnings
-===========================================
-
-Incremental compilation is unsafe when compilation relies on tools with potential side effects (tools that can cause data races or modify the state of other projects that have been deemed safe to skip compilation. Or tools that integrate timestamps or GUIDs into the build output).
-
-The presence of such cases will turn off incremental compilation.
-
-The following represent warning codes printed by CLI when the project structure is unsafe for incremental build and advice on how to address them:
-
-- __[Pre / Post scripts]__: Scripts that run before and after each compiler invocation can introduce side effects that could cause incremental compilation to output corrupt builds (not building when it should have built) or to over-build. Consider modifying the project structure to run these scripts before / after the entire compile process, not between compiler invocations.
-
-- __[PATH probing]__: Resolving tool names from PATH is problematic. First, we cannot detect when PATH tools change (which would to trigger re-compilation of sources). Second, it adds machine specific dependencies which would cause the build to succeed on some machines and fail on others. Consider using NuGet packages instead of PATH resolved tools. Thus there would be no machine specific dependencies and we would be able track when NuGet packages change and therefore trigger re-compilation.
-
-- __[Unknown Compiler]__: csc, vbc, and fsc have known side effects (which files and directories they read, write, and what they are not reading/writing).
-We don’t know this for other compilers. So we choose to be safe and disable incremental compilation for now. We are planning to enable specification of tool side effects in a future version, so that they can participate in incremental compilation as well.
-
-- __[Forced Unsafe]__: The build was not incremental because the `--no-incremental` flag was used. Remove this flag to enable incremental compilation.
diff --git a/Documentation/cli-prerequisites.md b/Documentation/cli-prerequisites.md
deleted file mode 100644
index 930d8aaf2..000000000
--- a/Documentation/cli-prerequisites.md
+++ /dev/null
@@ -1,4 +0,0 @@
-CLI native prerequisites
-=========================
-
-This document now lives in the [.NET Core native pre-requisities document](https://github.com/dotnet/core/blob/master/Documentation/prereqs.md) in the dotnet/core repository.
\ No newline at end of file
diff --git a/Documentation/dotnet-test-protocol.md b/Documentation/dotnet-test-protocol.md
deleted file mode 100644
index 50af88a51..000000000
--- a/Documentation/dotnet-test-protocol.md
+++ /dev/null
@@ -1,44 +0,0 @@
-dotnet-test communication protocol
-===================================
-
-## Introduction
-Anytime you pass a port to dotnet test, the command will run in design time. That means that dotnet test will connect to that port
-using TCP and will then exchange an established set of messages with whatever else is connected to that port. When this happens, the runner
-also receives a new port that dotnet test will use to communicate with it. The reason why the runner also uses TCP to
-communicate with dotnet test is because in design mode, it is not sufficient to just output results to the console. The
-command needs to send the adapter structure messages containing the results of the test execution.
-
-### Communication protocol at design time.
-
-1. Because during design time, dotnet test connects to a port when it starts up, the adapter needs to be listening on
-that port otherwise dotnet test will fail. We did it like this so that the adapter could reserve all the ports it needs
-by binding and listening to them before dotnet test ran and tried to get ports for the runner.
-2. Once dotnet test starts, it sends a TestSession.Connected message to the adapter indicating that it is ready to receive messages.
-3. It is possible to send an optional
-[version check](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Messages/ProtocolVersionMessage.cs)
-message with the adapter version of the protocol in it. Dotnet test will send back the version of the protocol that it supports.
-
-All messages have the format described here:
-[Message.cs](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Messages/Message.cs).
-The payload formats for each message is described in links to the classes used to serialize/deseralize the information in the description of the protocol.
-
-#### Test Execution
-
-
-1. After the optional version check, the adapter sends a TestExecution.GetTestRunnerProcessStartInfo, with the
-[tests](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Messages/RunTestsMessage.cs) it wants to execute inside of it. Dotnet test sends back a FileName and Arguments inside a [TestStartInfo](https://github.com/dotnet/cli/blob/rel/1.0.0/src/dotnet/commands/dotnet-test/TestStartInfo.cs) payload that the adapter can use to start the runner. In the past, we would send the list of tests to run as part of that argument, but we were actually going over the command line size limit for some test projects.
- 1. As part of the arguments, we send a port that the runner should connect to and for executing tests, a --wait-command flag, that indicates that the runner should connect to the port and wait for commands, instead of going ahead and executing the tests.
-2. At this point, the adapter can launch the runner (and attach to it for debugging if it chooses to).
-3. Once the runner starts, it sends dotnet test a TestRunner.WaitCommand message that indicates it is ready to receive commands, at which point dotnet test sends a TestRunner.Execute with the list of [tests](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Messages/RunTestsMessage.cs) to run. This bypasses the command line size limit described above.
-4. The runner then sends dotnet test (and it passes forward to the adapter) a TestExecution.TestStarted for each tests as they start with the [test](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Test.cs) information inside of it.
-5. The runner also sends dotnet test (and it forwards to the adapter) a TestExecution.TestResult for each test with the [individual result](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/TestResult.cs) of the test.
-6. After all tests finish, the runner sends a TestRunner.Completed message to dotnet test, which dotnet test sends as TestExecution.Completed to the adapter.
-7. Once the adapter is done, it sends dotnet test a TestSession.Terminate which will cause dotnet test to shutdown.
-
-#### Test discovery
-
-
-1. After the optional version check, the adapter sends a TestDiscovery.Start message. Because in this case, the adapter does not need to attach to the process, dotnet test will start the runner itself. Also, since there is no long list of arguments to be passed to the runner, no --wait-command flag is needed to be passed to the runner. dotnet test only passes a --list argument to the runner, which means the runner should not run the tests, just list them.
-2. The runner then sends dotnet test (and it passes forward to the adapter) a TestDiscovery.TestFound for each [test](https://github.com/dotnet/cli/blob/rel/1.0.0/src/Microsoft.Extensions.Testing.Abstractions/Test.cs) found.
-3. After all tests are discovered, the runner sends a TestRunner.Completed message to dotnet test, which dotnet test sends as TestDiscovery.Completed to the adapter.
-4. Once the adapter is done, it sends dotnet test a TestSession.Terminate which will cause dotnet test to shutdown.
diff --git a/Documentation/general/cli-ux-guidelines.md b/Documentation/general/cli-ux-guidelines.md
new file mode 100644
index 000000000..69b8c0325
--- /dev/null
+++ b/Documentation/general/cli-ux-guidelines.md
@@ -0,0 +1,157 @@
+.NET Core Command-Line Tools UX Guidelines
+-------------------------------------------
+
+This document outlines the User Experience (UX) of the .NET Core command lline tools (CLI).These guideliens are intended for anyone that wants to add a new command to the CLI.
+
+The guidelines presented in this document have been adopted to provide a clear and concise
+command line syntax that is easy to learn, remember and work with, and that has an added benefit
+of being familiar to people who have used other command-line interfaces as well as existing
+Visual Studio users.
+
+## Naming the commands
+
+In the .NET Core CLI, commands should be **verbs**. This rule was adopted
+because most of the commands do *something*.
+
+Sub-commands are supported in the CLI, and they are usually nouns. A good
+example of this is the “dotnet add reference” command. If there is a need to add
+a subcommand, that subcommand should usually specialize what the parent command
+does.
+
+## Create/Read/Update/Delete (CRUD) commands
+New CRUD commands should be named according to the following logic:
+
+- Does the command work on data in the project (either properties or
+ items)? If yes, then it should be added as a noun to the “dotnet
+ add/list/remove/update”, e.g. “dotnet add foo”.
+
+- Does the command work on the solution (SLN) file? If yes, then it should be
+ added as a verb to the “dotnet sln” command.
+
+- Does the command work on a completely new artifact (e.g. a new metadata file
+ that is added in the future)? If yes, it should be created as a top level
+ noun with all of the underlying operations defined as sub-commands.
+
+- If the command adds a new artifact to the project, it should become an item
+ template that is dropped with “dotnet new” command.
+
+
+If none of the above applies, the proposal should clearly outline why none of
+the above applies and suggest an alternative naming that will be decided on
+during the process described above.
+
+If the command works on the project or solution, it must also accept an optional
+argument that specifies which project or solution to work on. The current
+convention is for that argument to follow the verb in the CRUD command. For
+example:
+
+> dotnet add \ reference \
+
+All the existing CRUD commands have this argument defined and it will be passed
+to the sub-command as part of the overall options. The sub-command is expected
+to consider this optional argument.
+
+## Options
+CLI follows the [GNU convention](https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html) for options’ format, which is based on the POSIX
+standard. The summary is:
+
+- Command can have both short and long options.
+
+- The short format starts with a single dash (“-“), and has **exactly** one
+ letter. The letter is usually the start letter of the longer form of the
+ option, e.g. “-o” for “--output” or any of its words. This provides a good
+ mnemonic.
+
+ - **Example:** “dotnet build -o path/to/where/to/put/output”
+
+- The long format starts with double dashes (“--“) and can have one or more
+ words. Multiple words are separated by a single dash (“-“).
+
+ - **Example:** “dotnet test --test-case-filter”
+
+- The double dashes (“--“) on their own mark the **argument separator**.
+ Anything after this option is passed verbatim to whatever the command starts
+ as a sub-process.
+
+ - **Example:** “dotnet run -- --app-arg-1”
+
+- Windows-style forward slash options (e.g. “/p”) are supported **only for
+ MSBuild parameters.**
+
+- PowerShell-style single dashes with a word (e.g. “-Filter”) are **not
+ supported**.
+
+- Help options are predefined as “-h \| --help” and those should be used.
+
+There are common options in the CLI that are reserved for certain concepts. The
+table below outlines those common options. If a command needs to accept the same
+options, it should use these and it must not replace their semantics (e.g. use
+“--output” to mean something different or redefine what “-f” means for just that
+command).
+
+| Long option | Short option | Description |
+|------------------|--------------|--------------------------------------------------------------|
+| \--framework | \-f | Specifies which framework (target) to use in the invocation. |
+| \--output | \-o | Specifies where the output of the command should be placed. |
+| \--runtime | \-r | Specifies the runtime ID (RID) to use in the invocation. |
+| \--configuration | \-c | Specifies the configuration to use in the invocation. |
+| \--verbosity | \-v | Specifies the verbosity level of the command. |
+| \--help | \-h | Shows the help for the command. |
+
+One special area is interacting with MSBuild. If a command has the need to do
+that, there are two additional requirements with regards to options:
+
+1. The commands need to be able to take “/p” parameters in addition to whatever
+ other properties they require.
+
+2. If the command invokes a predefined MSBuild target, it needs to block
+ “/t:\” and “/target:\” options and throw an error that is
+ pre-defined in the CLI.
+
+It is important to note that commands that invoke user-specified targets
+should not be submitted to the CLI, since the CLI comes with “dotnet msbuild”
+command that does precisely that.
+
+## Arguments
+Arguments can have any name that authors of the commands being added need. We do have predefined
+argument names for the SLN file and project file. They are defined in the CLI
+source code and should be used if the command has the need to use those two
+arguments.
+
+## Help messages
+Help messages are automatically generated based on the arguments, options and
+command name. No other work should be required here apart from setting up the
+above mentioned and their descriptions.
+
+## Output
+For commands that are invoking MSBuild, the output will be controlled by MSBuild
+itself.
+
+In case of a long running operation, the command needs to provide a feedback
+mechanism to the user to help the user reason about whether the command has
+crashed or is just waiting for I/O. The feedback mechanism guidelines are below:
+
+1. Feedback should not require fonts with special glyphs for display.
+2. Pure text is acceptable (e.g. `Running background process...`) as a feedback mechanism.
+3. Spinners that conform to rule \#1 above are also acceptable.
+
+
+### Verbosity
+If the command interacts with MSBuild, it is required that it can accept a
+“--verbosity \| -v” argument and pass it to MSBuild verbatim.
+
+If the command’s verbosity levels cannot fit naturally in [MSBuild’s verbosity levels](https://docs.microsoft.com/en-us/visualstudio/msbuild/msbuild-command-line-reference) or the command does not interact with MSBuild but still has an option to set the verbosity, it
+is the job of the command to map them in the most appropriate way. This way, the
+verbosity levels will be uniform across all commands which brings consistency to
+the toolset.
+
+#### Example
+As an example, let us consider a “dotnet configure” command. It doesn’t interact
+with MSBuild. I wish to have verbosity on it, but it really has only two levels:
+quiet (just successes or errors) and verbose (every operation) that I've defined for the command. To satisfy the
+above-mentioned requirement, in my command I would define the “--verbosity \|
+-v” option and would map the arguments in the following way:
+
+- “Quiet” gets mapped naturally to “quiet”
+
+- “Minimal”, “Normal” and “Diagnostic” get mapped into “verbose”
diff --git a/Documentation/general/intro-to-cli.md b/Documentation/general/intro-to-cli.md
new file mode 100644
index 000000000..0fca2016f
--- /dev/null
+++ b/Documentation/general/intro-to-cli.md
@@ -0,0 +1,62 @@
+Introduction to .NET Core CLI
+=============================
+
+The .NET Core CLI is a simple, extensible and standalone set of tools for building, managing and otherwise operating on .NET projects. It will or already includes commands such as compilation, NuGet package management and launching a debugger session. It is intended to be fully featured, enabling extensive library and app development functionality appropriate at the command-line. It should provide everything you'd need to develop an app in an SSH session! It is also intended to be a fundamental building block for building finished experiences in tools such as Visual Studio.
+
+Goals:
+
+- Language agnostic - embrace "common language runtime".
+- Target agnostic - multi-targets.
+- Simple extensibility and layering - "you had one job!"
+- Cross-platform - support and personality.
+- Semantic user interface over [MSBuild](https://github.com/Microsoft/msbuild).
+
+Experience
+==========
+
+The [.NET Core command-line tools](https://github.com/dotnet/cli) present the "dotnet" tool as the entry-point tool. It provides higher-level commands, often using multiple tools together to complete a task. It's a convenience wrapper over the other tools, which can also be used directly. "dotnet" isn't magical at all, but a very simple aggregator of other tools.
+
+You can get a sense of using the tools from the examples below.
+
+**dotnet restore**
+
+`dotnet restore` restores dependent package from a given NuGet feed (e.g. NuGet.org) for the project in scope.
+
+**dotnet run**
+
+`dotnet run` compiles and runs your app with one step.
+
+**dotnet build**
+
+`dotnet build` compiles your app or library as an IL binary.
+
+Design
+======
+
+There are a couple of moving pieces that you make up the general design of the .NET Core CLI:
+
+* The `dotnet` driver
+* Specific commands that are part of the package
+
+The `dotnet` driver is very simple and its primary role is to run commands and give users basic information about usage.
+
+The way the `dotnet` driver finds the command it is instructed to run using `dotnet {command}` is via a convention; any executable that is placed in the PATH and is named `dotnet-{command}` will be available to the driver. For example, when you install the CLI toolchain there will be an executable called `dotnet-build` in your PATH; when you run `dotnet build`, the driver will run the `dotnet-build` executable. All of the arguments following the command are passed to the command being invoked. So, in the invocation of `dotnet build --native`, the `--native` switch will be passed to `dotnet-build` executable that will do some action based on it (in this case, produce a single native binary).
+
+Adding a new command to the .NET Core CLI
+=========================================
+
+If you want to contribute to the actual .NET Core CLI by adding a new command that you think would be useful, please refer to the [developer guide](developer-guide.md) in this directory. It contains all of the guidance on both the process as well as the infrastructure that you need to adhere to when adding a new command to the CLI toolchain.
+
+After you familiarize yourself with the process of working with the source code in the repo, please consult the [CLI UX guidelines](cli-ux-guidelines.md) to get to know the user experience tenants the CLI has.
+
+Adding a new command locally
+============================
+If you wish to extend the CLI, you can read more about supported extensibility models in the [official extensibility document](https://docs.microsoft.com/en-us/dotnet/articles/core/tools/extensibility)/.
+
+Guidance on how to write a command
+==================================
+How you write a given command depends largely on whether you are trying to add it to the CLI project or want to add the command locally, that is on your machine or server.
+
+For the former case, the [developer guide](developer-guide.md) has all of the details that you will need to get going.
+
+If you are adding a command on your own machine(s), then there is really no special model to keep in mind. However, since your users will be using the local commands through the `dotnet` driver, we strongly suggest to keep to the principles outlined in the [CLI UX guidelines](cli-ux-guidelines.md) to have an unified user experience for your users.
diff --git a/Documentation/images/DotnetTestDiscoverTests.png b/Documentation/images/DotnetTestDiscoverTests.png
deleted file mode 100644
index 76b332f93..000000000
Binary files a/Documentation/images/DotnetTestDiscoverTests.png and /dev/null differ
diff --git a/Documentation/images/DotnetTestExecuteTests.png b/Documentation/images/DotnetTestExecuteTests.png
deleted file mode 100644
index ca786410e..000000000
Binary files a/Documentation/images/DotnetTestExecuteTests.png and /dev/null differ
diff --git a/Documentation/intro-to-cli.md b/Documentation/intro-to-cli.md
deleted file mode 100644
index 5065bb5e8..000000000
--- a/Documentation/intro-to-cli.md
+++ /dev/null
@@ -1,100 +0,0 @@
-Intro to .NET Core CLI
-======================
-
-The .NET Core CLI is a simple, extensible and standalone set of tools for building, managing and otherwise operating on .NET projects. It will or already includes commands such as compilation, NuGet package management and launching a debugger session. It is intended to be fully featured, enabling extensive library and app development functionality appropriate at the command-line. It should provide everything you'd need to develop an app in an SSH session! It is also intended to be a fundamental building block for building finished experiences in tools such as Visual Studio.
-
-Goals:
-
-- Language agnostic - embrace "common language runtime".
-- Target agnostic - multi-targets.
-- Runtime agnostic.
-- Simple extensibility and layering - "you had one job!"
-- Cross-platform - support and personality.
-- Outside-in philosophy - higher-level tools drive the CLI.
-
-Historical Context - DNX
-========================
-
-We've been using [DNX](http://blogs.msdn.com/b/dotnet/archive/2015/04/29/net-announcements-at-build-2015.aspx#dnx) for all .NET Core scenarios for nearly two years. It provides a lot of great experiences, but doesn't have great "pay for play" characteristics. DNX is a big leap from building the [CoreCLR](https://github.com/dotnet/coreclr) and [CoreFX](https://github.com/dotnet/corefx) repos and wanting to build an app with a simple environment. In fact, one of the open source contributors to CoreCLR said: "I can build CoreCLR, but I don't know how to build 'Hello World'." We cannot have that!
-
-.NET Core includes three new components: a set of standalone command-line (CLI) tools, a shared framework and a set of runtime services. These components will replace DNX and are essentially DNX split in three parts.
-
-The DNX services will be offered as a hosting option available to apps. You can opt to use a host that offers one or more of these services, like file change watching or NuGet package servicing. You can also opt to use a shared framework, to ease deployment of dependencies and for performance reasons. Some of this is still being designed and isn't yet implemented.
-
-ASP.NET 5 will transition to the new tools for RC2. This is already in progress. There will be a smooth transition from DNX to these new .NET Core components.
-
-Experience
-==========
-
-The [CLI tools](https://github.com/dotnet/cli) present the "dotnet" tool as the entry-point tool. It provides higher-level commands, often using multiple tools together to complete a task. It's a convenience wrapper over the other tools, which can also be used directly. "dotnet" isn't magical at all, but a very simple aggregator of other tools.
-
-You can get a sense of using the tools from the examples below.
-
-**dotnet restore**
-
-`dotnet restore` restores dependent package from a given NuGet feed (e.g. NuGet.org) for the project in scope.
-
-**dotnet run**
-
-`dotnet run` compiles and runs your app with one step. Same as `dnx run`.
-
-**dotnet build**
-
-`dotnet build --native` native compiles your app into a single executable file.
-
-`dotnet build` compiles your app or library as an IL binary. In the case of an app, `build` generates runnable assets by copying an executable host to make the IL binary runable. The host relies on a shared framework for dependencies, including a runtime.
-
-Design
-======
-
-There are a couple of moving pieces that you make up the general design of the .NET Core CLI:
-
-* The `dotnet` driver
-* Specific commands that are part of the package
-
-The `dotnet` driver is very simple and its primary role is to run commands and give users basic information about usage.
-
-The way the `dotnet` driver finds the command it is instructed to run using `dotnet {command}` is via a convention; any executable that is placed in the PATH and is named `dotnet-{command}` will be available to the driver. For example, when you install the CLI toolchain there will be an executable called `dotnet-build` in your PATH; when you run `dotnet build`, the driver will run the `dotnet-build` executable. All of the arguments following the command are passed to the command being invoked. So, in the invocation of `dotnet build --native`, the `--native` switch will be passed to `dotnet-build` executable that will do some action based on it (in this case, produce a single native binary).
-
-This is also the basics of the current extensibility model of the toolchain. Any executable found in the PATH named in this way, that is as `dotnet-{command}`, will be invoked by the `dotnet` driver.
-
-There are some principles that we are using when adding new commands:
-
-* Each command is represented by a verb (`run`, `build`, `publish`, `restore` etc.)
-* We support the short and the long form of switches for most commands
-* The switches have the same format on all supported platforms (so, no /-style switches on Windows for example)
-* Each command has a help that can be viewed by running `dotnet [command] --help`
-
-Adding a new command to the .NET Core CLI
-=========================================
-
-If you want to contribute to the actual .NET Core CLI by adding a new command that you think would be useful, please refer to the [developer guide](developer-guide.md) in this directory. It contains all of the guidance on both the process as well as the infrastructure that you need to adhere to when adding a new command to the CLI toolchain.
-
-Adding a new command locally
-============================
-Given the extensibility model described above, it is very easy to add a command that can be invoked with the `dotnet` driver. Just add any executable in a PATH and name it as per the instructions above.
-
-As an example, let's say we want to add a local command that will mimic `dotnet clean`. By convention, `dotnet build` will drop binaries in two directories `./bin` and `./obj`. A clean command thus will need to delete these two directories. A trivial example, but it should work.
-
-On *nix OS-es, we will write a very simple shell script to help us with this:
-```shell
-#!/bin/bash
-
-rm -rf bin/ obj/
-```
-
-We then do the following to make it be a command in the CLI toolchain
-
-* Name it as `dotnet-clean`
-* Set the executable bit on: `chmod +X dotnet-clean`
-* Copy it over somewhere in the $PATH: `sudo cp dotnet-clean /usr/local/bin`
-
-After this, the command ready to be invoked via the `dotnet` driver.
-
-Guidances on how to write a command
-===================================
-How you write a given command depends largely on whether you are trying to add it to the CLI project or want to add the command locally, i.e. on your machine or server.
-
-For the former case, the [developer guide](developer-guide.md) has all of the details that you will need to get going.
-
-If you are adding a command on your own machine(s), then there is really no special model to keep in mind. However, since your users will be using the local commands through the `dotnet` driver, we strongly suggest to keep to the principles outlined above in the [design section](#design) to have an unified user experience for your users.
diff --git a/Documentation/known-issues.md b/Documentation/known-issues.md
deleted file mode 100644
index 36f21b7ab..000000000
--- a/Documentation/known-issues.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Known issues & workarounds
-==========================
-
-This document now lives in the [known issues document](https://github.com/dotnet/core/blob/master/cli/known-issues.md) in the dotnet/core repository.
diff --git a/Documentation/developer-guide.md b/Documentation/project-docs/developer-guide.md
similarity index 100%
rename from Documentation/developer-guide.md
rename to Documentation/project-docs/developer-guide.md
diff --git a/Documentation/issue-filing-guide.md b/Documentation/project-docs/issue-filing-guide.md
similarity index 100%
rename from Documentation/issue-filing-guide.md
rename to Documentation/project-docs/issue-filing-guide.md
diff --git a/Documentation/cli-installation-scenarios.md b/Documentation/specs/cli-installation-scenarios.md
similarity index 90%
rename from Documentation/cli-installation-scenarios.md
rename to Documentation/specs/cli-installation-scenarios.md
index 51d764bf2..d9e1a8187 100644
--- a/Documentation/cli-installation-scenarios.md
+++ b/Documentation/specs/cli-installation-scenarios.md
@@ -126,8 +126,8 @@ Below table shows the mapping between the channels, branches and feeds for the D
| Channel | Branch | Debian feed | Debian package name | NuGet version | NuGet feed |
|------------ |----------- |------------- |--------------------- |--------------- |--------------------------------------- |
| Future | master | Development | dotnet-future | 1.0.0-dev-* | https://dotnet.myget.org/f/dotnet-cli |
-| Preview | rel/ | Development | dotnet | 1.0.0-beta-* | https://dotnet.myget.org/f/dotnet-cli |
-| Production | production/ | Production | dotnet | 1.0.0 | https://api.nuget.org/v3/index.json |
+| Preview | rel/ | Development | dotnet-dev- | 1.0.0-beta-* | https://dotnet.myget.org/f/dotnet-cli |
+| Production | rel/ | Production | dotnet-dev- | 1.0.0 | https://api.nuget.org/v3/index.json |
## Funnels and discovery mechanisms for CLI bits
@@ -203,20 +203,29 @@ The features the script needs to support/have are:
* Support specifying whether the debug package needs to be downloaded
* Automatically add the install to $PATH unless --no-path/-NoPath is present
+The installation script exists in this repo under `scripts/obtain` path. However, for most users it is reccomended to use the stable version that is hosted on [.NET Core main website](https://dot.net). The direct path to the scripts are:
+
+* https://dot.net/v1/dotnet-install.sh (bash, UNIX)
+* https://dot.net/v1/dotnet-install.ps1 (powershell, Windows)
+
#### Installation script features
The following arguments are needed for the installation script:
-| dotnet-install.sh arg (Linux, OSX) | dotnet-install.ps1 arg (Windows) | Defaults | Description |
-|-------------------------------------- |------------------------------------ |----------------------- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| --channel | -Channel | "preview" | Which channel (i.e. "Future", "preview", "production", "release/1.1.0") to install from. |
-| --version | -Version | global.json or Latest | Which version of CLI to install; you need to specify the version as 3-part version (i.e. 1.0.0-13232). If omitted, it will default to the first global.json that contains the sdkVersion property; if that is not present it will use Latest. |
-| --install-dir | -InstallDir | .dotnet | Path to where to install the CLI bundle. The directory is created if it doesn't exist. On Linux/OSX this directory is created in the user home directory (`$HOME`). On Windows, this directory is created in `%LocalAppData%`. |
-| --debug | -Debug | false | Whether to use the "fat" packages that contain debugging symbols or not. |
-| --no-path | -NoPath | false | Do not export the installdir to the path for the current session. This makes CLI tools available immediately after install. |
-| --shared-runtime | -SharedRuntime | false | Install just the shared runtime bits, not the entire SDK. |
+| dotnet-install.sh arg (Linux, OSX) | dotnet-install.ps1 arg (Windows) | Defaults | Description |
+|------------------------------------|----------------------------------|-----------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| --channel | -Channel | "production" | Which channel (i.e. "Future", "preview", "production", "release/1.1.0") to install from. |
+| --version | -Version | Latest | Which version of CLI to install; you need to specify the version as 3-part version (i.e. 1.0.0-13232). If omitted, it will default to Latest for that channel. |
+| --install-dir | -InstallDir | .dotnet | Path to where to install the CLI bundle. The directory is created if it doesn't exist. On Linux/OSX this directory is created in the user home directory (`$HOME`). On Windows, this directory is created in `%LocalAppData%`. |
+| --debug-symbols | -DebugSymbols | false | Whether to use the "fat" packages that contain debugging symbols or not. |
+| --no-path | -NoPath | false | Do not export the installdir to the path for the current session. This makes CLI tools available immediately after install. |
+| --shared-runtime | -SharedRuntime | false | Install just the shared runtime bits, not the entire SDK. |
+| --architecture | -Architecture | Current OS (``) | Architecture to install. The possible values are ``, `x64` and `x86`. |
+| --dry-run | -DryRun | false | If set, it will not perform the installation but will show, on standard output, what the invocation of the script will do with the options selected. |
+| --verbose | -Verbose | false | Display diagnostic information. |
+| N/A | -ProxyAddress | "" | If set, the installer will use the specified proxy server for all of its invocations. |
-Note: Powershell arg naming convention is supported on Windows and non-Windows platforms. Non-Windows platforms do additionally support convention specific to their platform.
+> Note: Powershell arg naming convention is supported on Windows and non-Windows platforms. Non-Windows platforms do additionally support convention specific to their platform.
##### Install the 1.1.0 of the shared runtime
diff --git a/Documentation/supported-os-matrix.md b/Documentation/supported-os-matrix.md
deleted file mode 100644
index 718b98cda..000000000
--- a/Documentation/supported-os-matrix.md
+++ /dev/null
@@ -1,4 +0,0 @@
-Supported OS Matrix for CLI
-===========================
-
-The supported matrix now lives in the [roadmap document](https://github.com/dotnet/core/blob/master/roadmap.md) in the dotnet/core repository.
diff --git a/README.md b/README.md
index 907cf9680..03a888c99 100644
--- a/README.md
+++ b/README.md
@@ -4,22 +4,12 @@
This repo contains the source code for cross-platform [.NET Core](http://github.com/dotnet/core) command line toolchain. It contains the implementation of each command, the native packages for various supported platforms as well as documentation.
-RC 4 release - MSBuild based tools
----------------------------------------
-As was outlined in the ["Changes to project.json" blog post](https://blogs.msdn.microsoft.com/dotnet/2016/05/23/changes-to-project-json/), we have started work to move away from project.json to csproj and MSBuild. All the new `latest` releases from this repo (from `rel/1.0.0` branch) are MSBuild-enabled tools.
+Looking for V1 of the .NET Core tooling?
+----------------------------------------
+If you are looking for the v1.0.1 release of the .NET Core tools (CLI, MSBuild and the new csproj), head over to https://dot.net/core and download!
-The current official release of the csproj-enabled CLI tools is **CLI RC 4**.
-
-There are a couple of things to keep in mind:
-
-* RC 4 CLI bits are still **in development** so some rough edges are to be expected.
-* RC 4 bits **do not support** project.json so you will have to either keep Preview 2 tools around or migrate your project or add a global.json file to your project to target preview2. You can find more information on this using the [project.json to csproj instructions](https://github.com/dotnet/cli/blob/rel/1.0.0/Documentation/ProjectJsonToCSProj.md).
-* RC 4 refers to the **CLI tools only** and does not cover Visual Studio, VS Code or Visual Studio for Mac.
-* We welcome any and all issues that relate to MSBuild-based tools, so feel free to try them out and leave comments and file any bugs/problems.
-
-### Download links
-* Instructions and links for download: [RC3 download links](https://github.com/dotnet/core/blob/master/release-notes/rc3-download.md).
-* Directory for future Preview release notes: [.NET Core release notes](https://github.com/dotnet/core/tree/master/release-notes).
+> **Note:** the master branch of the CLI repo is based on the upcoming v2 of .NET Core and is considered pre-release. For production-level usage, please use the
+> v1 of the tools.
Found an issue?
---------------
@@ -32,9 +22,9 @@ This project has adopted the code of conduct defined by the [Contributor Covenan
Build Status
------------
-|Ubuntu 14.04 / Linux Mint 17 |Ubuntu 16.04 |Debian 8.2 |Windows x64 |Windows x86 |Mac OS X |CentOS 7.1 / Oracle Linux 7.1 |RHEL 7.2 |
-|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|
-|[![][ubuntu-14.04-build-badge]][ubuntu-14.04-build]|[![][ubuntu-16.04-build-badge]][ubuntu-16.04-build]|[![][debian-8.2-build-badge]][debian-8.2-build]|[![][win-x64-build-badge]][win-x64-build]|[![][win-x86-build-badge]][win-x86-build]|[![][osx-build-badge]][osx-build]|[![][centos-build-badge]][centos-build]|[![][rhel-build-badge]][rhel-build]|
+|Ubuntu 14.04 / Linux Mint 17 |Ubuntu 16.04 |Debian 8.2 |Windows x64 |Windows x86 |Mac OS X |CentOS 7.1 / Oracle Linux 7.1 |RHEL 7.2 | Linux x64 |
+|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|:------:|
+|[![][ubuntu-14.04-build-badge]][ubuntu-14.04-build]|[![][ubuntu-16.04-build-badge]][ubuntu-16.04-build]|[![][debian-8.2-build-badge]][debian-8.2-build]|[![][win-x64-build-badge]][win-x64-build]|[![][win-x86-build-badge]][win-x86-build]|[![][osx-build-badge]][osx-build]|[![][centos-build-badge]][centos-build]|[![][rhel-build-badge]][rhel-build]|[![][linux-build-badge]][linux-build]|
[win-x64-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/5449/badge
[win-x64-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=5449
@@ -60,6 +50,9 @@ Build Status
[rhel-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/5446/badge
[rhel-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=5446
+[linux-build-badge]: https://devdiv.visualstudio.com/_apis/public/build/definitions/0bdbc590-a062-4c3f-b0f6-9383f67865ee/5603/badge
+[linux-build]: https://devdiv.visualstudio.com/DevDiv/_build?_a=completed&definitionId=5603
+
Installers and Binaries
-----------------------
@@ -80,6 +73,7 @@ In order to download just the .NET Core runtime without the SDK, please visit ht
| **Mac OS X** | [Installer][osx-installer] - [Checksum][osx-installer-checksum]
[tar.gz][osx-targz] - [Checksum][osx-targz-checksum] |
| **CentOS 7.1 / Oracle Linux 7** | [tar.gz][centos-targz] - [Checksum][centos-targz-checksum] |
| **RHEL 7.2** | [tar.gz][rhel-targz] - [Checksum][rhel-targz-checksum] |
+| **Linux x64** | [tar.gz][linux-targz] - [Checksum][linux-targz-checksum] |
*Note: Our Debian packages are put together slightly differently than the other OS specific installers. Instead of combining everything, we have separate component packages that depend on each other. If you're installing these directly from the .deb files (via dpkg or similar), then you'll need to install the [corresponding Host, Host FX Resolver, and Shared Framework packages](https://github.com/dotnet/core-setup#daily-builds) before installing the Sdk package.*
@@ -119,6 +113,9 @@ In order to download just the .NET Core runtime without the SDK, please visit ht
[rhel-targz]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-dev-rhel-x64.latest.tar.gz
[rhel-targz-checksum]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-dev-rhel-x64.latest.tar.gz.sha
+[linux-targz]: https://dotnetcli.blob.core.windows.net/dotnet/Sdk/master/dotnet-dev-linux-x64.latest.tar.gz
+[linux-targz-checksum]: https://dotnetclichecksums.blob.core.windows.net/dotnet/Sdk/master/dotnet-dev-linux-x64.latest.tar.gz.sha
+
Docker
------
diff --git a/TestAssets/DesktopTestProjects/AppWithProjTool2Fx/App.csproj b/TestAssets/DesktopTestProjects/AppWithProjTool2Fx/App.csproj
index cdee4c764..3d0fbce93 100644
--- a/TestAssets/DesktopTestProjects/AppWithProjTool2Fx/App.csproj
+++ b/TestAssets/DesktopTestProjects/AppWithProjTool2Fx/App.csproj
@@ -1,10 +1,12 @@
+
+
netcoreapp2.0;net451
Exe
$(PackageTargetFallback);portable-net45+win8;dnxcore50
win7-x64;win7-x86;osx.10.10-x64;osx.10.11-x64;ubuntu.14.04-x64;ubuntu.16.04-x64;centos.7-x64;rhel.7.2-x64;debian.8-x64
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/NonRestoredTestProjects/AppThrowingException/AppDependingOnOtherAsTool/AppDependingOnOtherAsTool.csproj b/TestAssets/NonRestoredTestProjects/AppThrowingException/AppDependingOnOtherAsTool/AppDependingOnOtherAsTool.csproj
index bc411a282..b6c5d14f1 100644
--- a/TestAssets/NonRestoredTestProjects/AppThrowingException/AppDependingOnOtherAsTool/AppDependingOnOtherAsTool.csproj
+++ b/TestAssets/NonRestoredTestProjects/AppThrowingException/AppDependingOnOtherAsTool/AppDependingOnOtherAsTool.csproj
@@ -1,9 +1,10 @@
-
+
+
Exe
netcoreapp2.0
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/NonRestoredTestProjects/AppWithNonExistingToolDependency/AppWithNonExistingToolDependency.csproj b/TestAssets/NonRestoredTestProjects/AppWithNonExistingToolDependency/AppWithNonExistingToolDependency.csproj
index 1c8d1740c..4029e9cbe 100644
--- a/TestAssets/NonRestoredTestProjects/AppWithNonExistingToolDependency/AppWithNonExistingToolDependency.csproj
+++ b/TestAssets/NonRestoredTestProjects/AppWithNonExistingToolDependency/AppWithNonExistingToolDependency.csproj
@@ -1,4 +1,5 @@
+
Exe
@@ -6,7 +7,7 @@
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/EmptyItemGroup/EmptyItemGroup.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/EmptyItemGroup/EmptyItemGroup.csproj
index 25ef28b1e..0bdb79506 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/EmptyItemGroup/EmptyItemGroup.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/EmptyItemGroup/EmptyItemGroup.csproj
@@ -1,11 +1,13 @@
+
+
Library
net451;netcoreapp2.0
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Lib/Lib.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Lib/Lib.csproj
index 2a53aaf1b..1be153a79 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Lib/Lib.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Lib/Lib.csproj
@@ -1,10 +1,12 @@
+
+
Library
net451;netcoreapp2.0;netstandard1.4
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/a.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/a.csproj
index 93b7a8cc0..68b8ed617 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/a.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/a.csproj
@@ -1,10 +1,12 @@
+
+
Library
netcoreapp2.0
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/b.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/b.csproj
index 93b7a8cc0..68b8ed617 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/b.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/MoreThanOne/b.csproj
@@ -1,10 +1,12 @@
+
+
Library
netcoreapp2.0
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Net452AndNetCoreApp10Lib/Net452AndNetCoreApp10Lib.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Net452AndNetCoreApp10Lib/Net452AndNetCoreApp10Lib.csproj
index 4363b3d05..e11e31084 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Net452AndNetCoreApp10Lib/Net452AndNetCoreApp10Lib.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/Net452AndNetCoreApp10Lib/Net452AndNetCoreApp10Lib.csproj
@@ -1,9 +1,11 @@
+
+
Library
net452;netcoreapp2.0
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/ValidRef/ValidRef.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/ValidRef/ValidRef.csproj
index 5b7ad5497..0fc35d3d8 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/ValidRef/ValidRef.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/ValidRef/ValidRef.csproj
@@ -1,9 +1,11 @@
+
+
Library
net451;netcoreapp1.0;netstandard1.4
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithDoubledRef/WithDoubledRef.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithDoubledRef/WithDoubledRef.csproj
index e64114491..f33aa7821 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithDoubledRef/WithDoubledRef.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithDoubledRef/WithDoubledRef.csproj
@@ -1,10 +1,12 @@
+
+
Library
net451;netcoreapp1.0
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondOnItem/WithExistingRefCondOnItem.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondOnItem/WithExistingRefCondOnItem.csproj
index c0dae0f2c..8747ed6b7 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondOnItem/WithExistingRefCondOnItem.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondOnItem/WithExistingRefCondOnItem.csproj
@@ -1,10 +1,12 @@
+
+
Library
net451;netcoreapp1.0
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondWhitespaces/WithExistingRefCondWhitespaces.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondWhitespaces/WithExistingRefCondWhitespaces.csproj
index 8a098269c..0b2792110 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondWhitespaces/WithExistingRefCondWhitespaces.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithExistingRefCondWhitespaces/WithExistingRefCondWhitespaces.csproj
@@ -1,10 +1,12 @@
+
+
Library
net451;netcoreapp1.0
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefCondNonUniform/WithRefCondNonUniform.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefCondNonUniform/WithRefCondNonUniform.csproj
index 6982aadb6..decd23bec 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefCondNonUniform/WithRefCondNonUniform.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefCondNonUniform/WithRefCondNonUniform.csproj
@@ -1,10 +1,12 @@
+
+
Library
net451;netcoreapp1.0
-
+
diff --git a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefNoCondNonUniform/WithRefNoCondNonUniform.csproj b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefNoCondNonUniform/WithRefNoCondNonUniform.csproj
index ecf964c2d..328fc5fb1 100644
--- a/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefNoCondNonUniform/WithRefNoCondNonUniform.csproj
+++ b/TestAssets/NonRestoredTestProjects/DotnetAddP2PProjects/WithRefNoCondNonUniform/WithRefNoCondNonUniform.csproj
@@ -1,10 +1,12 @@
+
+
Library
net451;netcoreapp1.0
-
+
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.sln b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.sln
new file mode 100644
index 000000000..5fe171b9d
--- /dev/null
+++ b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "FolderHasDifferentName", "FolderHasDifferentName.xproj", "{0138CB8F-4AA9-4029-A21E-C07C30F425BA}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0138CB8F-4AA9-4029-A21E-C07C30F425BA}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.xproj b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.xproj
new file mode 100644
index 000000000..d18702195
--- /dev/null
+++ b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/FolderHasDifferentName.xproj
@@ -0,0 +1,18 @@
+
+
+
+ 14.0.23107
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+
+ 0138cb8f-4aa9-4029-a21e-c07c30f425ba
+ TestAppWithContents
+ ..\..\..\artifacts\obj\$(MSBuildProjectName)
+ ..\..\..\artifacts\
+
+
+ 2.0
+
+
+
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/Program.cs b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/Program.cs
new file mode 100644
index 000000000..f6b060a91
--- /dev/null
+++ b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/Program.cs
@@ -0,0 +1,16 @@
+// Copyright (c) .NET Foundation and contributors. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace TestApp
+{
+ public class Program
+ {
+ public static int Main(string[] args)
+ {
+ Console.WriteLine("Hello World");
+ return 0;
+ }
+ }
+}
diff --git a/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/project.json b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/project.json
new file mode 100644
index 000000000..166d41c2b
--- /dev/null
+++ b/TestAssets/NonRestoredTestProjects/PJAppWithXprojNameDifferentThanDirName/project.json
@@ -0,0 +1,26 @@
+{
+ "version": "1.0.0-*",
+ "buildOptions": {
+ "emitEntryPoint": true,
+ "preserveCompilationContext": true
+ },
+ "dependencies": {
+ "Microsoft.NETCore.App": "1.0.1"
+ },
+ "frameworks": {
+ "netcoreapp1.0": {}
+ },
+ "runtimes": {
+ "win7-x64": {},
+ "win7-x86": {},
+ "osx.10.10-x64": {},
+ "osx.10.11-x64": {},
+ "ubuntu.14.04-x64": {},
+ "ubuntu.16.04-x64": {},
+ "centos.7-x64": {},
+ "rhel.7.2-x64": {},
+ "debian.8-x64": {},
+ "fedora.23-x64": {},
+ "opensuse.13.2-x64": {}
+ }
+}
diff --git a/TestAssets/NonRestoredTestProjects/ToolWithRandomPackageName/AppWithDepOnTool/AppWithDepOnTool.csproj b/TestAssets/NonRestoredTestProjects/ToolWithRandomPackageName/AppWithDepOnTool/AppWithDepOnTool.csproj
index ac1f1e9df..f8265b727 100644
--- a/TestAssets/NonRestoredTestProjects/ToolWithRandomPackageName/AppWithDepOnTool/AppWithDepOnTool.csproj
+++ b/TestAssets/NonRestoredTestProjects/ToolWithRandomPackageName/AppWithDepOnTool/AppWithDepOnTool.csproj
@@ -1,10 +1,11 @@
+
Exe
netcoreapp2.0
random-name
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/TestProjects/AppWithDepOnToolWithOutputName/AppWithDepOnToolWithOutputName.csproj b/TestAssets/TestProjects/AppWithDepOnToolWithOutputName/AppWithDepOnToolWithOutputName.csproj
index 0cd47dfe0..ddaf88766 100755
--- a/TestAssets/TestProjects/AppWithDepOnToolWithOutputName/AppWithDepOnToolWithOutputName.csproj
+++ b/TestAssets/TestProjects/AppWithDepOnToolWithOutputName/AppWithDepOnToolWithOutputName.csproj
@@ -1,8 +1,10 @@
+
+
netcoreapp2.0
Exe
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/TestProjects/AppWithDirectDepWithOutputName/AppWithDirectDepWithOutputName.csproj b/TestAssets/TestProjects/AppWithDirectDepWithOutputName/AppWithDirectDepWithOutputName.csproj
index 1e70974f1..a74d7184d 100755
--- a/TestAssets/TestProjects/AppWithDirectDepWithOutputName/AppWithDirectDepWithOutputName.csproj
+++ b/TestAssets/TestProjects/AppWithDirectDepWithOutputName/AppWithDirectDepWithOutputName.csproj
@@ -1,8 +1,10 @@
+
+
netcoreapp2.0
Exe
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/TestProjects/AppWithMultipleFxAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj b/TestAssets/TestProjects/AppWithMultipleFxAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj
index 9c76e077b..33cb2b5a7 100644
--- a/TestAssets/TestProjects/AppWithMultipleFxAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj
+++ b/TestAssets/TestProjects/AppWithMultipleFxAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj
@@ -1,4 +1,6 @@
+
+
Exe
net451;netcoreapp2.0
@@ -8,7 +10,7 @@
-
+
diff --git a/TestAssets/TestProjects/AppWithToolDependency/AppWithToolDependency.csproj b/TestAssets/TestProjects/AppWithToolDependency/AppWithToolDependency.csproj
index 28fd12d4b..a22545fdc 100755
--- a/TestAssets/TestProjects/AppWithToolDependency/AppWithToolDependency.csproj
+++ b/TestAssets/TestProjects/AppWithToolDependency/AppWithToolDependency.csproj
@@ -1,8 +1,10 @@
+
+
netcoreapp2.0
Exe
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/TestProjects/DependencyContextFromTool/DependencyContextFromTool.csproj b/TestAssets/TestProjects/DependencyContextFromTool/DependencyContextFromTool.csproj
index dced66ec8..225f497ad 100755
--- a/TestAssets/TestProjects/DependencyContextFromTool/DependencyContextFromTool.csproj
+++ b/TestAssets/TestProjects/DependencyContextFromTool/DependencyContextFromTool.csproj
@@ -1,4 +1,6 @@
+
+
1.0.0
netcoreapp2.0
@@ -9,7 +11,7 @@
-
+
diff --git a/TestAssets/TestProjects/FluentProfile/FluentFilterProfile.xml b/TestAssets/TestProjects/FluentProfile/FluentFilterProfile.xml
new file mode 100644
index 000000000..6c3fb62a8
--- /dev/null
+++ b/TestAssets/TestProjects/FluentProfile/FluentFilterProfile.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/TestAssets/TestProjects/FluentProfile/FluentProfile.xml b/TestAssets/TestProjects/FluentProfile/FluentProfile.xml
new file mode 100644
index 000000000..512290d00
--- /dev/null
+++ b/TestAssets/TestProjects/FluentProfile/FluentProfile.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworks/MSBuildAppWithMultipleFrameworks.csproj b/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworks/MSBuildAppWithMultipleFrameworks.csproj
index 42207a365..0df7ccb42 100644
--- a/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworks/MSBuildAppWithMultipleFrameworks.csproj
+++ b/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworks/MSBuildAppWithMultipleFrameworks.csproj
@@ -1,11 +1,13 @@
+
+
Exe
net451;netcoreapp2.0
-
+
\ No newline at end of file
diff --git a/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworksAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj b/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworksAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj
index 893d29756..766c1ae66 100644
--- a/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworksAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj
+++ b/TestAssets/TestProjects/MSBuildAppWithMultipleFrameworksAndTools/MSBuildAppWithMultipleFrameworksAndTools.csproj
@@ -1,4 +1,6 @@
+
+
Exe
net451;netcoreapp2.0
@@ -8,7 +10,7 @@
-
+
diff --git a/TestAssets/TestProjects/MSBuildTestApp/MSBuildTestApp.csproj b/TestAssets/TestProjects/MSBuildTestApp/MSBuildTestApp.csproj
index 14b3277fe..ca4a8237d 100644
--- a/TestAssets/TestProjects/MSBuildTestApp/MSBuildTestApp.csproj
+++ b/TestAssets/TestProjects/MSBuildTestApp/MSBuildTestApp.csproj
@@ -1,9 +1,11 @@
+
+
Exe
netcoreapp2.0
win7-x64;win7-x86;osx.10.10-x64;osx.10.11-x64;ubuntu.14.04-x64;ubuntu.16.04-x64;centos.7-x64;rhel.7.2-x64;debian.8-x64
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/TestProjects/MultiDependentProject/MultiDependentProject.csproj b/TestAssets/TestProjects/MultiDependentProject/MultiDependentProject.csproj
new file mode 100644
index 000000000..8437d1b6d
--- /dev/null
+++ b/TestAssets/TestProjects/MultiDependentProject/MultiDependentProject.csproj
@@ -0,0 +1,12 @@
+
+
+
+ Exe
+ netcoreapp2.0
+
+
+
+
+
+
+
diff --git a/TestAssets/TestProjects/MultiDependentProject/Program.cs b/TestAssets/TestProjects/MultiDependentProject/Program.cs
new file mode 100644
index 000000000..248a4d29f
--- /dev/null
+++ b/TestAssets/TestProjects/MultiDependentProject/Program.cs
@@ -0,0 +1,24 @@
+// Copyright (c) .NET Foundation and contributors. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using System.Collections;
+using Newtonsoft.Json.Linq;
+using FluentAssertions;
+
+class Program
+{
+ public static void Main(string[] args)
+ {
+ ArrayList argList = new ArrayList(args);
+ JObject jObject = new JObject();
+
+ foreach (string arg in argList)
+ {
+ jObject[arg] = arg;
+ }
+
+ jObject.Count.Should().Be(0);
+ Console.WriteLine(jObject.ToString());
+ }
+}
diff --git a/TestAssets/TestProjects/TestAppSimple/TestAppSimple.csproj b/TestAssets/TestProjects/TestAppSimple/TestAppSimple.csproj
index f07c4cb85..542dd829a 100755
--- a/TestAssets/TestProjects/TestAppSimple/TestAppSimple.csproj
+++ b/TestAssets/TestProjects/TestAppSimple/TestAppSimple.csproj
@@ -1,7 +1,9 @@
+
+
netcoreapp2.0
Exe
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
\ No newline at end of file
diff --git a/TestAssets/TestProjects/TestAppWithEmptySln/App/App.csproj b/TestAssets/TestProjects/TestAppWithEmptySln/App/App.csproj
index 7f94050c6..ce5bf06cb 100644
--- a/TestAssets/TestProjects/TestAppWithEmptySln/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithEmptySln/App/App.csproj
@@ -1,4 +1,6 @@
+
+
Exe
netcoreapp2.0
@@ -9,7 +11,7 @@
-
+
diff --git a/TestAssets/TestProjects/TestAppWithMultipleSlnFiles/App/App.csproj b/TestAssets/TestProjects/TestAppWithMultipleSlnFiles/App/App.csproj
index e3bb138de..7a2163613 100644
--- a/TestAssets/TestProjects/TestAppWithMultipleSlnFiles/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithMultipleSlnFiles/App/App.csproj
@@ -1,11 +1,13 @@
+
+
Exe
netcoreapp2.0
-
+
diff --git a/TestAssets/TestProjects/TestAppWithProjDepTool/TestAppWithProjDepTool.csproj b/TestAssets/TestProjects/TestAppWithProjDepTool/TestAppWithProjDepTool.csproj
index 178808fce..ba6ef78be 100644
--- a/TestAssets/TestProjects/TestAppWithProjDepTool/TestAppWithProjDepTool.csproj
+++ b/TestAssets/TestProjects/TestAppWithProjDepTool/TestAppWithProjDepTool.csproj
@@ -1,8 +1,10 @@
+
+
Exe
netcoreapp2.0
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCaseSensitiveSolutionFolders/src/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCaseSensitiveSolutionFolders/src/App/App.csproj
index e97ec13d1..3a31eb5bf 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndCaseSensitiveSolutionFolders/src/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndCaseSensitiveSolutionFolders/src/App/App.csproj
@@ -1,4 +1,6 @@
+
+
Exe
netcoreapp2.0
@@ -9,7 +11,7 @@
-
+
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojFiles/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojFiles/App/App.csproj
index 7f94050c6..ce5bf06cb 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojFiles/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojFiles/App/App.csproj
@@ -1,4 +1,6 @@
+
+
Exe
netcoreapp2.0
@@ -9,7 +11,7 @@
-
+
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDir/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDir/App.csproj
index 537d9c27b..92f102c88 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDir/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDir/App.csproj
@@ -1,4 +1,6 @@
+
+
Exe
netcoreapp2.0
@@ -9,7 +11,7 @@
-
+
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDirToRemove/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDirToRemove/App.csproj
index f40030266..abea1bc3d 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDirToRemove/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojInSubDirToRemove/App.csproj
@@ -1,10 +1,12 @@
+
+
Exe
netcoreapp2.0
-
+
\ No newline at end of file
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojProjectGuidFiles/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojProjectGuidFiles/App/App.csproj
index 7f94050c6..ce5bf06cb 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojProjectGuidFiles/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojProjectGuidFiles/App/App.csproj
@@ -1,4 +1,6 @@
+
+
Exe
netcoreapp2.0
@@ -9,7 +11,7 @@
-
+
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndCsprojToRemove/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndCsprojToRemove/App/App.csproj
index e3bb138de..7a2163613 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndCsprojToRemove/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndCsprojToRemove/App/App.csproj
@@ -1,11 +1,13 @@
+
+
Exe
netcoreapp2.0
-
+
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndDuplicateProjectReferences/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndDuplicateProjectReferences/App/App.csproj
index 7f94050c6..ce5bf06cb 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndDuplicateProjectReferences/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndDuplicateProjectReferences/App/App.csproj
@@ -1,4 +1,6 @@
+
+
Exe
netcoreapp2.0
@@ -9,7 +11,7 @@
-
+
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferences/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferences/App/App.csproj
index 3ae94455e..21cce6681 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferences/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferences/App/App.csproj
@@ -1,4 +1,6 @@
+
+
Exe
netcoreapp2.0
@@ -13,7 +15,7 @@
-
+
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferencesWithEscapedDirSep/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferencesWithEscapedDirSep/App/App.csproj
index 3ae94455e..21cce6681 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferencesWithEscapedDirSep/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndExistingCsprojReferencesWithEscapedDirSep/App/App.csproj
@@ -1,4 +1,6 @@
+
+
Exe
netcoreapp2.0
@@ -13,7 +15,7 @@
-
+
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndLastCsprojInSubDirToRemove/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndLastCsprojInSubDirToRemove/App.csproj
index f40030266..abea1bc3d 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndLastCsprojInSubDirToRemove/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndLastCsprojInSubDirToRemove/App.csproj
@@ -1,10 +1,12 @@
+
+
Exe
netcoreapp2.0
-
+
\ No newline at end of file
diff --git a/TestAssets/TestProjects/TestAppWithSlnAndSolutionFolders/src/App/App.csproj b/TestAssets/TestProjects/TestAppWithSlnAndSolutionFolders/src/App/App.csproj
index e97ec13d1..3a31eb5bf 100644
--- a/TestAssets/TestProjects/TestAppWithSlnAndSolutionFolders/src/App/App.csproj
+++ b/TestAssets/TestProjects/TestAppWithSlnAndSolutionFolders/src/App/App.csproj
@@ -1,4 +1,6 @@
+
+
Exe
netcoreapp2.0
@@ -9,7 +11,7 @@
-
+
diff --git a/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj b/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj
index a7978edd8..84252d545 100644
--- a/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj
+++ b/TestAssets/TestProjects/VSTestDesktopAndNetCore/VSTestDesktopAndNetCore.csproj
@@ -1,5 +1,6 @@
-
+
+
Exe
net46;netcoreapp2.0
@@ -10,7 +11,7 @@
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj b/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj
index 6debc7d65..711143c68 100644
--- a/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj
+++ b/TestAssets/TestProjects/VSTestDotNetCore/VSTestDotNetCore.csproj
@@ -1,9 +1,10 @@
-
+
+
Exe
netcoreapp2.0
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj b/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj
index 1b0f1ca42..625d5a0d7 100644
--- a/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj
+++ b/TestAssets/TestProjects/VSTestXunitDesktopAndNetCore/VSTestXunitDesktopAndNetCore.csproj
@@ -1,5 +1,5 @@
-
+
Exe
@@ -13,7 +13,7 @@
-
+
diff --git a/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj b/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj
index 0882089c9..ae4226e6c 100644
--- a/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj
+++ b/TestAssets/TestProjects/VSTestXunitDotNetCore/VSTestXunitDotNetCore.csproj
@@ -1,9 +1,10 @@
-
+
+
Exe
netcoreapp2.0
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/build.proj b/build.proj
index 54372ad1c..9f7894c3f 100644
--- a/build.proj
+++ b/build.proj
@@ -20,7 +20,7 @@
DependsOnTargets="MSBuildWorkaroundTarget;
RestoreDotnetCliBuildFramework">
-
@@ -35,7 +35,7 @@
Outputs="@(RestoreDotnetCliBuildFrameworkOutputs)">
- $(ExtraRestoreArgs) /p:GeneratingPropsFile=$(GeneratingPropsFile)
+ $(ExtraRestoreArgs) /p:GeneratePropsFile=$(GeneratePropsFile)
$(ExtraRestoreArgs) --disable-parallel
@@ -47,6 +47,7 @@
+
diff --git a/build/Branding.props b/build/Branding.props
index a11613cd0..935355a02 100644
--- a/build/Branding.props
+++ b/build/Branding.props
@@ -1,6 +1,6 @@
- Microsoft .NET Core 2.0.0 - SDK Alpha
+ Microsoft .NET Core 2.0.0 - SDK Preview 1
Microsoft .NET Core 2.0.0 - Runtime
Microsoft .NET Core 2.0.0 - Host
Microsoft .NET Core 2.0.0 - Host FX Resolver
diff --git a/build/BuildDefaults.props b/build/BuildDefaults.props
index e04468c6f..bbf51f97b 100644
--- a/build/BuildDefaults.props
+++ b/build/BuildDefaults.props
@@ -2,7 +2,12 @@
Prepare;Compile;Test;Package;Publish
Debug
- true
+ true
+ true
+ false
true
false
diff --git a/build/BuildInfo.targets b/build/BuildInfo.targets
new file mode 100644
index 000000000..6df905670
--- /dev/null
+++ b/build/BuildInfo.targets
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+ $(HostRid)
+ x64
+ $(HostOSName)
+
+
+<Project ToolsVersion="15.0">
+ <PropertyGroup>
+ <Rid>$(Rid)</Rid>
+ <Architecture>$(Architecture)</Architecture>
+ <OSName>$(OSName)</OSName>
+ </PropertyGroup>
+</Project>
+
+
+
+ $([System.IO.File]::ReadAllText($(BuildInfoProps)))
+
+
+ false
+ true
+
+
+
+
+
diff --git a/build/DependencyVersions.props b/build/DependencyVersions.props
index 872193613..ee631dd4f 100644
--- a/build/DependencyVersions.props
+++ b/build/DependencyVersions.props
@@ -1,10 +1,10 @@
- 2.0.0-beta-001675-00
+ 2.0.0-beta-001697-00
15.2.0-preview-000047-02
2.0.0-rc4-61325-08
- 1.1.0-alpha-20170303-2
+ 1.1.0-alpha-20170306-2
4.3.0-beta1-2342
1.0.0-alpha-20170130-3-281
15.0.0
diff --git a/build/GitCommitInfo.targets b/build/GitCommitInfo.targets
index 3631da0fa..4addb6c8a 100644
--- a/build/GitCommitInfo.targets
+++ b/build/GitCommitInfo.targets
@@ -10,10 +10,17 @@
+
+
+
+
+
- true
+
+ %(GitInfoCommitCountLines.Identity)
+ $(GitInfoCommitCount.PadLeft(6,'0'))
+
+ %(GitInfoCommitHashLines.Identity)
<Project ToolsVersion="15.0">
@@ -23,11 +30,19 @@
</PropertyGroup>
</Project>
+
+
+ $([System.IO.File]::ReadAllText($(GitCommitInfoProps)))
+
+
+ false
+ true
diff --git a/build/HostInfo.targets b/build/HostInfo.targets
index 095ac2c8d..50331f196 100644
--- a/build/HostInfo.targets
+++ b/build/HostInfo.targets
@@ -2,10 +2,9 @@
-
+
-
@@ -13,9 +12,8 @@
<Project ToolsVersion="15.0">
<PropertyGroup>
- <Rid>$(HostRid)</Rid>
- <Architecture>$(HostArchitecture)</Architecture>
- <OSName>$(HostOSName)</OSName>
+ <HostRid>$(HostRid)</HostRid>
+ <HostOSName>$(HostOSName)</HostOSName>
</PropertyGroup>
</Project>
diff --git a/build/InitRepo.props b/build/InitRepo.props
index 1ba0ff119..39a2b5b99 100644
--- a/build/InitRepo.props
+++ b/build/InitRepo.props
@@ -3,5 +3,6 @@
$(RepoRoot)/artifacts/obj
$(GeneratedPropsDir)/GitCommitInfo.props
$(GeneratedPropsDir)/HostInfo.props
+ $(GeneratedPropsDir)/BuildInfo.props
diff --git a/build/InitRepo.targets b/build/InitRepo.targets
index 4912d749b..be227551e 100644
--- a/build/InitRepo.targets
+++ b/build/InitRepo.targets
@@ -3,7 +3,8 @@
DependsOnTargets="BuildDotnetCliBuildFramework;
EnsureGeneratedPropsDirectory;
WriteGitCommitInfoProps;
- WriteHostInfoProps"/>
+ WriteHostInfoProps;
+ WriteBuildInfoProps"/>
+
+
+
+
+
+
+
diff --git a/build/Version.props b/build/Version.props
index 402ae0858..a121c2f6d 100644
--- a/build/Version.props
+++ b/build/Version.props
@@ -3,7 +3,7 @@
2
0
0
- alpha
+ preview1
$(VersionMajor).$(VersionMinor).$(VersionPatch)-$(ReleaseSuffix)
$(VersionMajor).$(VersionMinor).$(VersionPatch).$(CommitCount)
diff --git a/build/package/dotnet-deb-tool-consumer.csproj b/build/package/dotnet-deb-tool-consumer.csproj
index ab41745f0..d4b3f6896 100644
--- a/build/package/dotnet-deb-tool-consumer.csproj
+++ b/build/package/dotnet-deb-tool-consumer.csproj
@@ -1,7 +1,9 @@
+
+
netcoreapp2.0
- 2.0.0-beta-001509-00
+ $(CLI_SharedFrameworkVersion)
diff --git a/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs b/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs
index db3cbd396..8be9f8f4d 100644
--- a/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs
+++ b/build_projects/dotnet-cli-build/CheckIfAllBuildsHavePublished.cs
@@ -57,6 +57,7 @@ namespace Microsoft.DotNet.Cli.Build
{ "osx_x64", false },
{ "debian_x64", false },
{ "centos_x64", false },
+ { "linux_x64", false },
};
if (!badges.ContainsKey(VersionBadgeMoniker))
diff --git a/build_projects/dotnet-cli-build/GetCurrentRuntimeInformation.cs b/build_projects/dotnet-cli-build/GetCurrentRuntimeInformation.cs
index 9f6f5f39b..352a225cf 100644
--- a/build_projects/dotnet-cli-build/GetCurrentRuntimeInformation.cs
+++ b/build_projects/dotnet-cli-build/GetCurrentRuntimeInformation.cs
@@ -13,16 +13,12 @@ namespace Microsoft.DotNet.Cli.Build
[Output]
public string Rid { get; set; }
- [Output]
- public string Architecture { get; set; }
-
[Output]
public string OSName { get; set; }
public override bool Execute()
{
Rid = RuntimeEnvironment.GetRuntimeIdentifier();
- Architecture = RuntimeEnvironment.RuntimeArchitecture;
OSName = GetOSShortName();
return true;
diff --git a/build_projects/dotnet-cli-build/dotnet-cli-build.csproj b/build_projects/dotnet-cli-build/dotnet-cli-build.csproj
index d28da9a83..5e6cddc3c 100644
--- a/build_projects/dotnet-cli-build/dotnet-cli-build.csproj
+++ b/build_projects/dotnet-cli-build/dotnet-cli-build.csproj
@@ -7,6 +7,9 @@
true
bin\$(Configuration)
$(PackageTargetFallback);portable-net45+win8+wp8+wpa81
+
+
+ $(CoreCLRRid)
@@ -31,5 +34,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/build_projects/update-dependencies/update-dependencies.ps1 b/build_projects/update-dependencies/update-dependencies.ps1
index 4b1c0ce19..5a9760ecb 100644
--- a/build_projects/update-dependencies/update-dependencies.ps1
+++ b/build_projects/update-dependencies/update-dependencies.ps1
@@ -44,7 +44,7 @@ $env:PATH = "$env:DOTNET_INSTALL_DIR;$env:PATH"
# Generate some props files that are imported by update-dependencies
Write-Host "Generating property files..."
-dotnet msbuild $RepoRoot\build.proj /p:Architecture=$Architecture /p:GeneratingPropsFile=true /t:WriteDynamicPropsToStaticPropsFiles
+dotnet msbuild $RepoRoot\build.proj /p:Architecture=$Architecture /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles
if($LASTEXITCODE -ne 0) { throw "Failed to generate intermidates" }
# Restore the app
diff --git a/build_projects/update-dependencies/update-dependencies.sh b/build_projects/update-dependencies/update-dependencies.sh
index 66faccf9a..ccfb06831 100755
--- a/build_projects/update-dependencies/update-dependencies.sh
+++ b/build_projects/update-dependencies/update-dependencies.sh
@@ -44,7 +44,7 @@ export PATH=$DOTNET_INSTALL_DIR:$PATH
# Generate some props files that are imported by update-dependencies
echo "Generating property files..."
-dotnet msbuild "$REPO_ROOT/build.proj" /p:Architecture=x64 /p:GeneratingPropsFile=true /t:WriteDynamicPropsToStaticPropsFiles
+dotnet msbuild "$REPO_ROOT/build.proj" /p:Architecture=x64 /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles
echo "Resotring $PROJECT_PATH..."
dotnet restore "$PROJECT_PATH"
diff --git a/dir.props b/dir.props
index 8d31ff867..3e2360e86 100644
--- a/dir.props
+++ b/dir.props
@@ -14,8 +14,9 @@
-
-
+
+
+
diff --git a/netci.groovy b/netci.groovy
index b2e30786e..b3b59263d 100644
--- a/netci.groovy
+++ b/netci.groovy
@@ -9,7 +9,7 @@ def project = GithubProject
def branch = GithubBranchName
def isPR = true
-def platformList = ['Debian8.2:x64:Debug', 'Ubuntu:x64:Release', 'Ubuntu16.04:x64:Debug', 'OSX:x64:Release', 'Windows_NT:x64:Release', 'Windows_NT:x86:Debug', 'RHEL7.2:x64:Release', 'CentOS7.1:x64:Debug']
+def platformList = ['Linux:x64:Release', 'Debian8.2:x64:Debug', 'Ubuntu:x64:Release', 'Ubuntu16.04:x64:Debug', 'OSX:x64:Release', 'Windows_NT:x64:Release', 'Windows_NT:x86:Debug', 'RHEL7.2:x64:Release', 'CentOS7.1:x64:Debug']
def static getBuildJobName(def configuration, def os, def architecture) {
return configuration.toLowerCase() + '_' + os.toLowerCase() + '_' + architecture.toLowerCase()
@@ -19,6 +19,7 @@ def static getBuildJobName(def configuration, def os, def architecture) {
platformList.each { platform ->
// Calculate names
def (os, architecture, configuration) = platform.tokenize(':')
+ def osUsedForMachineAffinity = os;
// Calculate job name
def jobName = getBuildJobName(configuration, os, architecture)
@@ -34,6 +35,10 @@ platformList.each { platform ->
else if (os == 'Ubuntu') {
buildCommand = "./build.sh --skip-prereqs --configuration ${configuration} --docker ubuntu.14.04 --targets Default"
}
+ else if (os == 'Linux') {
+ osUsedForMachineAffinity = 'Ubuntu16.04';
+ buildCommand = "./build.sh --linux-portable --skip-prereqs --configuration ${configuration} --targets Default"
+ }
else {
// Jenkins non-Ubuntu CI machines don't have docker
buildCommand = "./build.sh --skip-prereqs --configuration ${configuration} --targets Default"
@@ -53,9 +58,13 @@ platformList.each { platform ->
}
}
- Utilities.setMachineAffinity(newJob, os, 'latest-or-auto')
+ Utilities.setMachineAffinity(newJob, osUsedForMachineAffinity, 'latest-or-auto')
Utilities.standardJobSetup(newJob, project, isPR, "*/${branch}")
- Utilities.addMSTestResults(newJob, '**/*.trx')
+ // Remove this check once tests work for 2.0. Until that time Linux portable tests will fail so we
+ // don't run the tests and there won't be any .trx file.
+ if (os != 'Linux') {
+ Utilities.addMSTestResults(newJob, '**/*.trx')
+ }
Utilities.addGithubPRTriggerForBranch(newJob, branch, "${os} ${architecture} ${configuration} Build")
}
diff --git a/run-build.ps1 b/run-build.ps1
index 52add82f3..67ab3cd06 100644
--- a/run-build.ps1
+++ b/run-build.ps1
@@ -114,7 +114,7 @@ if ($NoBuild)
}
else
{
- dotnet msbuild build.proj /p:Architecture=$Architecture /p:GeneratingPropsFile=true /t:WriteDynamicPropsToStaticPropsFiles
+ dotnet msbuild build.proj /p:Architecture=$Architecture /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles
dotnet msbuild build.proj /m /v:diag /fl /flp:v=diag /p:Architecture=$Architecture $ExtraParameters
if($LASTEXITCODE -ne 0) { throw "Failed to build" }
}
diff --git a/run-build.sh b/run-build.sh
index 7a2939c7d..f96f9d0c0 100755
--- a/run-build.sh
+++ b/run-build.sh
@@ -55,6 +55,9 @@ source "$REPOROOT/scripts/common/_prettyprint.sh"
BUILD=1
+LINUX_PORTABLE_INSTALL_ARGS=
+CUSTOM_BUILD_ARGS=
+
# Set nuget package cache under the repo
export NUGET_PACKAGES="$REPOROOT/.nuget/packages"
@@ -93,6 +96,12 @@ while [[ $# > 0 ]]; do
args=( "${args[@]/$2}" )
shift
;;
+ --linux-portable)
+ LINUX_PORTABLE_INSTALL_ARGS="--linux-portable"
+ # Until we get test support for 2.0 we need to pass in the targets without test.
+ CUSTOM_BUILD_ARGS="/p:Rid=\"linux-x64\" /p:OSName=\"linux\" /p:CLITargets=\"Prepare;Compile;Package;Publish\""
+ args=( "${args[@]/$1}" )
+ ;;
--help)
echo "Usage: $0 [--configuration ] [--targets ] [--skip-prereqs] [--nopackage] [--docker ] [--help]"
echo ""
@@ -102,6 +111,7 @@ while [[ $# > 0 ]]; do
echo " --nopackage Skip packaging targets"
echo " --nobuild Skip building, showing the command that would be used to build"
echo " --docker Build in Docker using the Dockerfile located in scripts/docker/IMAGENAME"
+ echo " --linux-portable Builds the Linux portable .NET Tools instead of a distro-specific version."
echo " --help Display this help message"
exit 0
;;
@@ -155,8 +165,8 @@ if [ $? != 0 ]; then
fi
# now execute the script
-echo "installing CLI: $dotnetInstallPath --channel \"master\" --install-dir $DOTNET_INSTALL_DIR --architecture \"$ARCHITECTURE\""
-$dotnetInstallPath --channel "master" --install-dir $DOTNET_INSTALL_DIR --architecture "$ARCHITECTURE"
+echo "installing CLI: $dotnetInstallPath --channel \"master\" --install-dir $DOTNET_INSTALL_DIR --architecture \"$ARCHITECTURE\" $LINUX_PORTABLE_INSTALL_ARGS"
+$dotnetInstallPath --channel "master" --install-dir $DOTNET_INSTALL_DIR --architecture "$ARCHITECTURE" $LINUX_PORTABLE_INSTALL_ARGS
if [ $? != 0 ]; then
echo "run-build: Error: Boot-strapping post-PJ stage0 with exit code $?." >&2
exit $?
@@ -179,9 +189,9 @@ export DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1
echo "${args[@]}"
if [ $BUILD -eq 1 ]; then
- dotnet msbuild build.proj /p:Architecture=$ARCHITECTURE /p:GeneratingPropsFile=true /t:WriteDynamicPropsToStaticPropsFiles
- dotnet msbuild build.proj /m /v:diag /fl /flp:v=diag /p:Architecture=$ARCHITECTURE "${args[@]}"
+ dotnet msbuild build.proj /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS /p:GeneratePropsFile=true /t:WriteDynamicPropsToStaticPropsFiles
+ dotnet msbuild build.proj /m /v:diag /fl /flp:v=diag /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS "${args[@]}"
else
echo "Not building due to --nobuild"
- echo "Command that would be run is: 'dotnet msbuild build.proj /m /p:Architecture=$ARCHITECTURE ${args[@]}'"
+ echo "Command that would be run is: 'dotnet msbuild build.proj /m /p:Architecture=$ARCHITECTURE $CUSTOM_BUILD_ARGS ${args[@]}'"
fi
diff --git a/src/dotnet/commands/dotnet-cache/CacheCommandParser.cs b/src/dotnet/commands/dotnet-cache/CacheCommandParser.cs
index ba92ef6fb..9f71278f7 100644
--- a/src/dotnet/commands/dotnet-cache/CacheCommandParser.cs
+++ b/src/dotnet/commands/dotnet-cache/CacheCommandParser.cs
@@ -18,9 +18,18 @@ namespace Microsoft.DotNet.Cli
Create.Option(
"-e|--entries",
LocalizableStrings.ProjectEntryDescription,
- Accept.ExactlyOneArgument
+ Accept.OneOrMoreArguments
.With(name: LocalizableStrings.ProjectEntries)
- .Forward()),
+ .ForwardAs(o =>
+ {
+ var materializedString = $"{o.Arguments.First()}";
+
+ if (o.Arguments.Count() == 1) return materializedString;
+
+ var additionalProjects = string.Join("%3B", o.Arguments.Skip(1));
+
+ return $"{materializedString} /p:AdditionalProjects={additionalProjects}";
+ }),
CommonOptions.FrameworkOption(),
Create.Option(
"--framework-version",
diff --git a/src/dotnet/commands/dotnet-cache/Program.cs b/src/dotnet/commands/dotnet-cache/Program.cs
index 10a8f7a3c..2a1a6ec19 100644
--- a/src/dotnet/commands/dotnet-cache/Program.cs
+++ b/src/dotnet/commands/dotnet-cache/Program.cs
@@ -9,6 +9,7 @@ using Microsoft.DotNet.Cli;
using System.Diagnostics;
using System;
using System.IO;
+using System.Linq;
using Parser = Microsoft.DotNet.Cli.Parser;
namespace Microsoft.DotNet.Tools.Cache
diff --git a/src/dotnet/commands/dotnet-migrate/MigrateCommand.cs b/src/dotnet/commands/dotnet-migrate/MigrateCommand.cs
index 131a9c3c2..e49d7932a 100644
--- a/src/dotnet/commands/dotnet-migrate/MigrateCommand.cs
+++ b/src/dotnet/commands/dotnet-migrate/MigrateCommand.cs
@@ -131,6 +131,7 @@ namespace Microsoft.DotNet.Tools.Migrate
}
var csprojFilesToAdd = new HashSet();
+ var xprojFilesToRemove = new HashSet();
var slnPathWithTrailingSlash = PathUtility.EnsureTrailingSlash(slnFile.BaseDirectory);
foreach (var report in migrationReport.ProjectMigrationReports)
@@ -140,35 +141,35 @@ namespace Microsoft.DotNet.Tools.Migrate
slnPathWithTrailingSlash,
reportPathWithTrailingSlash);
- var xprojPath = Path.Combine(relativeReportPath, report.ProjectName + ".xproj");
- var xprojProjectsReferencedBySolution = slnFile.Projects.Where(p => p.FilePath == xprojPath);
-
var migratedProjectName = report.ProjectName + ".csproj";
- if (xprojProjectsReferencedBySolution.Count() == 1)
- {
- var slnProject = xprojProjectsReferencedBySolution.Single();
- slnProject.FilePath = Path.Combine(
- Path.GetDirectoryName(slnProject.FilePath),
- migratedProjectName);
- slnProject.TypeGuid = ProjectTypeGuids.CSharpProjectTypeGuid;
- }
- else
- {
- var csprojPath = Path.Combine(relativeReportPath, migratedProjectName);
- var solutionContainsCsprojPriorToMigration = slnFile.Projects
- .Where(p => p.FilePath == csprojPath)
- .Any();
+ var csprojPath = Path.Combine(relativeReportPath, migratedProjectName);
+ var solutionContainsCsprojPriorToMigration = slnFile.Projects
+ .Where(p => p.FilePath == csprojPath)
+ .Any();
- if (!solutionContainsCsprojPriorToMigration)
- {
- csprojFilesToAdd.Add(Path.Combine(report.ProjectDirectory, migratedProjectName));
- }
+ if (!solutionContainsCsprojPriorToMigration)
+ {
+ csprojFilesToAdd.Add(Path.Combine(report.ProjectDirectory, migratedProjectName));
}
foreach (var preExisting in report.PreExistingCsprojDependencies)
{
csprojFilesToAdd.Add(Path.Combine(report.ProjectDirectory, preExisting));
}
+
+ var projectDirectory = new DirectoryInfo(report.ProjectDirectory);
+ foreach (var xprojFileName in projectDirectory.EnumerateFiles("*.xproj"))
+ {
+ var xprojPath = Path.Combine(relativeReportPath, xprojFileName.Name);
+ var solutionContainsXprojFileToRemove = slnFile.Projects
+ .Where(p => p.FilePath == xprojPath)
+ .Any();
+
+ if (solutionContainsXprojFileToRemove)
+ {
+ xprojFilesToRemove.Add(Path.Combine(report.ProjectDirectory, xprojFileName.Name));
+ }
+ }
}
Version version;
@@ -185,7 +186,12 @@ namespace Microsoft.DotNet.Tools.Migrate
foreach (var csprojFile in csprojFilesToAdd)
{
- AddProject(slnFile.FullPath, csprojFile);
+ RunDotnetSlnCommand(slnFile.FullPath, csprojFile, "add");
+ }
+
+ foreach (var xprojFile in xprojFilesToRemove)
+ {
+ RunDotnetSlnCommand(slnFile.FullPath, xprojFile, "remove");
}
}
@@ -209,19 +215,19 @@ namespace Microsoft.DotNet.Tools.Migrate
slnFile.RemoveEmptySolutionFolders();
}
- private void AddProject(string slnPath, string csprojPath)
+ private void RunDotnetSlnCommand(string slnPath, string projPath, string commandName)
{
- List args = new List()
+ var args = new List()
{
"sln",
slnPath,
- "add",
- csprojPath,
+ commandName,
+ projPath,
};
var dotnetPath = Path.Combine(AppContext.BaseDirectory, "dotnet.dll");
- var addCommand = new ForwardingApp(dotnetPath, args);
- addCommand.Execute();
+ var command = new ForwardingApp(dotnetPath, args);
+ command.Execute();
}
private void MoveProjectJsonArtifactsToBackup(MigrationReport migrationReport)
diff --git a/src/dotnet/commands/dotnet-publish/Program.cs b/src/dotnet/commands/dotnet-publish/Program.cs
index 6ba893605..36ed70db3 100644
--- a/src/dotnet/commands/dotnet-publish/Program.cs
+++ b/src/dotnet/commands/dotnet-publish/Program.cs
@@ -35,6 +35,9 @@ namespace Microsoft.DotNet.Tools.Publish
var appliedPublishOption = result["dotnet"]["publish"];
+ CommandOption filterProjOption = app.Option(
+ $"--filter <{LocalizableStrings.FilterProjOption}>", LocalizableStrings.FilterProjOptionDescription,
+ CommandOptionType.MultipleValue);
msbuildArgs.AddRange(appliedPublishOption.OptionValuesToBeForwarded());
msbuildArgs.AddRange(appliedPublishOption.Arguments);
diff --git a/test/ArgumentForwardingTests/ArgumentForwardingTests.csproj b/test/ArgumentForwardingTests/ArgumentForwardingTests.csproj
index 4b73c9e78..a3ab58d0a 100644
--- a/test/ArgumentForwardingTests/ArgumentForwardingTests.csproj
+++ b/test/ArgumentForwardingTests/ArgumentForwardingTests.csproj
@@ -24,7 +24,7 @@
-
+
diff --git a/test/HackUntilWeGetXUnitXmlLogger/hack-get-ci-to-pass-testResults.xml b/test/HackUntilWeGetXUnitXmlLogger/hack-get-ci-to-pass-testResults.xml
deleted file mode 100644
index 87016e450..000000000
--- a/test/HackUntilWeGetXUnitXmlLogger/hack-get-ci-to-pass-testResults.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/CacheCommand.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/CacheCommand.cs
index 7cfbd65c1..08209f911 100644
--- a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/CacheCommand.cs
+++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/CacheCommand.cs
@@ -3,12 +3,13 @@
using Microsoft.DotNet.Cli.Utils;
using NuGet.Frameworks;
+using System.Collections.Generic;
namespace Microsoft.DotNet.Tools.Test.Utilities
{
public sealed class CacheCommand : TestCommand
{
- private string _profileProject;
+ private List _profileProject = new List();
private string _framework;
private string _output;
private string _runtime;
@@ -22,7 +23,8 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
public CacheCommand WithEntries(string profileProject)
{
- _profileProject = profileProject;
+ _profileProject.Add($"--entries {profileProject}");
+
return this;
}
public CacheCommand WithFramework(string framework)
@@ -83,7 +85,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
FrameworkVersionOption);
}
- private string ProfileProjectOption => string.IsNullOrEmpty(_profileProject) ? "" : $"--entries {_profileProject}";
+ private string ProfileProjectOption => string.Join(" ", _profileProject) ;
private string FrameworkOption => string.IsNullOrEmpty(_framework) ? "" : $"-f {_framework}";
diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/DotnetCommand.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/DotnetCommand.cs
index 98d4d0187..48dc47926 100644
--- a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/DotnetCommand.cs
+++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/DotnetCommand.cs
@@ -1,7 +1,6 @@
// Copyright (c) .NET Foundation and contributors. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
-using System;
using Microsoft.DotNet.Cli.Utils;
namespace Microsoft.DotNet.Tools.Test.Utilities
@@ -9,7 +8,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
public sealed class DotnetCommand : TestCommand
{
public DotnetCommand()
- : base("dotnet")
+ : base(DotnetUnderTest.FullName)
{
}
diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/PublishCommand.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/PublishCommand.cs
index 3a389d5c4..5bb0d01a6 100644
--- a/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/PublishCommand.cs
+++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/Commands/PublishCommand.cs
@@ -3,6 +3,7 @@
using Microsoft.DotNet.Cli.Utils;
using NuGet.Frameworks;
+using System.Collections.Generic;
namespace Microsoft.DotNet.Tools.Test.Utilities
{
@@ -11,7 +12,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
private string _framework;
private string _output;
private string _runtime;
- private string _profileproj;
+ private List _profileFilterProject = new List();
public PublishCommand()
: base("dotnet")
@@ -43,7 +44,7 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
public PublishCommand WithProFileProject(string profileproj)
{
- _profileproj = profileproj;
+ _profileFilterProject.Add( $" --filter {profileproj}");
return this;
}
@@ -74,6 +75,6 @@ namespace Microsoft.DotNet.Tools.Test.Utilities
private string RuntimeOption => string.IsNullOrEmpty(_runtime) ? "" : $"-r {_runtime}";
- private string ProfileProjOption => string.IsNullOrEmpty(_profileproj) ? "" : $"--filter {_profileproj}";
+ private string ProfileProjOption => string.Join(" ", _profileFilterProject);
}
}
diff --git a/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs b/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs
new file mode 100644
index 000000000..865612e4f
--- /dev/null
+++ b/test/Microsoft.DotNet.Tools.Tests.Utilities/DotnetUnderTest.cs
@@ -0,0 +1,26 @@
+// Copyright (c) .NET Foundation and contributors. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+using Microsoft.DotNet.Cli.Utils;
+
+namespace Microsoft.DotNet.Tools.Test.Utilities
+{
+ public static class DotnetUnderTest
+ {
+ static string _pathToDotnetUnderTest;
+
+ public static string FullName
+ {
+ get
+ {
+ if (_pathToDotnetUnderTest == null)
+ {
+ _pathToDotnetUnderTest = new Muxer().MuxerPath;
+ }
+
+ return _pathToDotnetUnderTest;
+ }
+ }
+ }
+}
diff --git a/test/dotnet-cache.Tests/GivenDotnetCachesAndPublishesProjects.cs b/test/dotnet-cache.Tests/GivenDotnetCachesAndPublishesProjects.cs
index b8451bb8f..296b06888 100644
--- a/test/dotnet-cache.Tests/GivenDotnetCachesAndPublishesProjects.cs
+++ b/test/dotnet-cache.Tests/GivenDotnetCachesAndPublishesProjects.cs
@@ -33,10 +33,7 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
var rid = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier();
var localAssemblyCache = Path.Combine(testProjectDirectory, "localAssemblyCache");
var intermediateWorkingDirectory = Path.Combine(testProjectDirectory, "workingDirectory");
- var profileProjectPath = TestAssets.Get(profileProjectName)
- .CreateInstance()
- .WithSourceFiles()
- .Root.FullName;
+ var profileProjectPath = TestAssets.Get(profileProjectName).Root.FullName;
var profileProject = Path.Combine(profileProjectPath, $"{profileProjectName}.xml");
new RestoreCommand()
@@ -55,12 +52,12 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
.Should().Pass();
var configuration = Environment.GetEnvironmentVariable("CONFIGURATION") ?? "Debug";
- var profilefilter = Path.Combine(localAssemblyCache, _arch, _tfm, "artifact.xml");
+ var profileFilter = Path.Combine(localAssemblyCache, _arch, _tfm, "artifact.xml");
new PublishCommand()
.WithFramework(_tfm)
.WithWorkingDirectory(testProjectDirectory)
- .WithProFileProject(profilefilter)
+ .WithProFileProject(profileFilter)
.Execute()
.Should().Pass();
@@ -85,11 +82,8 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
.UseCurrentRuntimeFrameworkVersion();
var testProjectDirectory = testInstance.Root.ToString();
- var profileProjectPath = TestAssets.Get(profileProjectName)
- .CreateInstance()
- .WithSourceFiles()
- .Root.FullName;
- var profileProject = Path.Combine(profileProjectPath, "NewtonsoftFilterProfile.xml");
+ var profileProjectPath = TestAssets.Get(profileProjectName).Root.FullName;
+ var profileFilter = Path.Combine(profileProjectPath, "NewtonsoftFilterProfile.xml");
new RestoreCommand()
.WithWorkingDirectory(testProjectDirectory)
@@ -101,7 +95,7 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
new PublishCommand()
.WithFramework(_tfm)
.WithWorkingDirectory(testProjectDirectory)
- .WithProFileProject(profileProject)
+ .WithProFileProject(profileFilter)
.Execute()
.Should().Pass();
@@ -112,5 +106,65 @@ namespace Microsoft.DotNet.Cli.Publish.Tests
.Should().Fail()
.And.HaveStdErrContaining("assembly specified in the dependencies manifest was not found -- package: 'newtonsoft.json',");
}
+
+ [Fact]
+ public void ItPublishesAnAppWithMultipleProfiles()
+ {
+ var testAppName = "MultiDependentProject";
+ var profileProjectName = "NewtonsoftProfile";
+ var profileProjectName1 = "FluentProfile";
+
+ var testInstance = TestAssets.Get(testAppName)
+ .CreateInstance()
+ .WithSourceFiles()
+ .UseCurrentRuntimeFrameworkVersion();
+
+ var testProjectDirectory = testInstance.Root.ToString();
+ var rid = DotnetLegacyRuntimeIdentifiers.InferLegacyRestoreRuntimeIdentifier();
+ var localAssemblyCache = Path.Combine(testProjectDirectory, "lAC");
+ var intermediateWorkingDirectory = Path.Combine(testProjectDirectory, "workingDirectory");
+
+ var profileProjectPath = TestAssets.Get(profileProjectName).Root.FullName;
+ var profileProject = Path.Combine(profileProjectPath, $"{profileProjectName}.xml");
+ var profileFilter = Path.Combine(profileProjectPath, "NewtonsoftFilterProfile.xml");
+
+ var profileProjectPath1 = TestAssets.Get(profileProjectName1).Root.FullName;
+ var profileProject1 = Path.Combine(profileProjectPath1, $"{profileProjectName1}.xml");
+ var profileFilter1 = Path.Combine(profileProjectPath1, "FluentFilterProfile.xml");
+
+ new RestoreCommand()
+ .WithWorkingDirectory(testProjectDirectory)
+ .Execute()
+ .Should().Pass();
+
+ new CacheCommand()
+ .WithEntries(profileProject)
+ .WithEntries(profileProject1)
+ .WithFramework(_tfm)
+ .WithRuntime(rid)
+ .WithOutput(localAssemblyCache)
+ .WithRuntimeFrameworkVersion(_frameworkVersion)
+ .WithIntermediateWorkingDirectory(intermediateWorkingDirectory)
+ .Execute($"--preserve-working-dir")
+ .Should().Pass();
+
+ var configuration = Environment.GetEnvironmentVariable("CONFIGURATION") ?? "Debug";
+
+ new PublishCommand()
+ .WithFramework(_tfm)
+ .WithWorkingDirectory(testProjectDirectory)
+ .WithProFileProject(profileFilter)
+ .WithProFileProject(profileFilter1)
+ .Execute()
+ .Should().Pass();
+
+ var outputDll = Path.Combine(testProjectDirectory, "bin", configuration, _tfm, "publish", $"{testAppName}.dll");
+
+ new TestCommand("dotnet")
+ .WithEnvironmentVariable("DOTNET_SHARED_PACKAGES", localAssemblyCache)
+ .ExecuteWithCapturedOutput(outputDll)
+ .Should().Pass()
+ .And.HaveStdOutContaining("{}");
+ }
}
}
diff --git a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs
index 7cd2205c7..b3c679a86 100644
--- a/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs
+++ b/test/dotnet-migrate.Tests/GivenThatIWantToMigrateSolutions.cs
@@ -229,11 +229,29 @@ namespace Microsoft.DotNet.Migration.Tests
.Execute($"restore \"{solutionRelPath}\"")
.Should().Pass();
- //ISSUE: https://github.com/dotnet/cli/issues/5205
- //new DotnetCommand()
- // .WithWorkingDirectory(projectDirectory)
- // .Execute($"build \"{solutionRelPath}\"")
- // .Should().Pass();
+ new DotnetCommand()
+ .WithWorkingDirectory(projectDirectory)
+ .Execute($"build \"{solutionRelPath}\"")
+ .Should().Pass();
+ }
+
+ [Fact]
+ public void WhenXprojNameIsDifferentThanDirNameItGetsRemovedFromSln()
+ {
+ var projectDirectory = TestAssets
+ .Get("NonRestoredTestProjects", "PJAppWithXprojNameDifferentThanDirName")
+ .CreateInstance()
+ .WithSourceFiles()
+ .Root;
+
+ new DotnetCommand()
+ .WithWorkingDirectory(projectDirectory)
+ .Execute($"migrate")
+ .Should().Pass();
+
+ var slnFile = SlnFile.Read(Path.Combine(projectDirectory.FullName, "FolderHasDifferentName.sln"));
+ slnFile.Projects.Count.Should().Be(1);
+ slnFile.Projects[0].FilePath.Should().Be("PJAppWithXprojNameDifferentThanDirName.csproj");
}
private void MigrateAndBuild(string groupName, string projectName, [CallerMemberName] string callingMethod = "", string identifier = "")
@@ -257,11 +275,10 @@ namespace Microsoft.DotNet.Migration.Tests
.Execute($"restore \"{solutionRelPath}\"")
.Should().Pass();
- //ISSUE: https://github.com/dotnet/cli/issues/5205
- //new DotnetCommand()
- // .WithWorkingDirectory(projectDirectory)
- // .Execute($"build \"{solutionRelPath}\"")
- // .Should().Pass();
+ new DotnetCommand()
+ .WithWorkingDirectory(projectDirectory)
+ .Execute($"build \"{solutionRelPath}\"")
+ .Should().Pass();
SlnFile slnFile = SlnFile.Read(Path.Combine(projectDirectory.FullName, solutionRelPath));
diff --git a/test/dotnet-sln-add.Tests/GivenDotnetSlnAdd.cs b/test/dotnet-sln-add.Tests/GivenDotnetSlnAdd.cs
index 78a11d09d..cd7b9c38a 100644
--- a/test/dotnet-sln-add.Tests/GivenDotnetSlnAdd.cs
+++ b/test/dotnet-sln-add.Tests/GivenDotnetSlnAdd.cs
@@ -465,11 +465,10 @@ EndGlobal
cmd.StdErr.Should().BeEmpty();
}
- //ISSUE: https://github.com/dotnet/cli/issues/5205
- //[Theory]
- //[InlineData("TestAppWithSlnAndCsprojFiles")]
- //[InlineData("TestAppWithSlnAndCsprojProjectGuidFiles")]
- //[InlineData("TestAppWithEmptySln")]
+ [Theory]
+ [InlineData("TestAppWithSlnAndCsprojFiles")]
+ [InlineData("TestAppWithSlnAndCsprojProjectGuidFiles")]
+ [InlineData("TestAppWithEmptySln")]
public void WhenValidProjectIsPassedTheSlnBuilds(string testAsset)
{
var projectDirectory = TestAssets
diff --git a/testAsset.props b/testAsset.props
new file mode 100644
index 000000000..4c05b30f1
--- /dev/null
+++ b/testAsset.props
@@ -0,0 +1,3 @@
+
+
+
diff --git a/tools/CrossGen.Dependencies/CrossGen.Dependencies.csproj b/tools/CrossGen.Dependencies/CrossGen.Dependencies.csproj
index 8ae84a8ff..fc4d473dd 100644
--- a/tools/CrossGen.Dependencies/CrossGen.Dependencies.csproj
+++ b/tools/CrossGen.Dependencies/CrossGen.Dependencies.csproj
@@ -3,7 +3,7 @@
netcoreapp2.0
- win7-x64;win7-x86;osx.10.11-x64;ubuntu.14.04-x64;ubuntu.16.04-x64;centos.7-x64;rhel.7.2-x64;debian.8-x64;osx.10.10-x64;rhel.7-x64
+ linux-x64;win7-x64;win7-x86;osx.10.11-x64;ubuntu.14.04-x64;ubuntu.16.04-x64;centos.7-x64;rhel.7.2-x64;debian.8-x64;osx.10.10-x64;rhel.7-x64