Merge pull request #5472 from dotnet/dev/jgoshi/handleDeprecatedPJ
Migration: support many deprecated features rather than failing migration
This commit is contained in:
commit
477d4fdf29
53 changed files with 1997 additions and 70 deletions
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Hello World!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"compilerName": "csc",
|
||||||
|
"compilationOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class HelperBuiltIn1
|
||||||
|
{
|
||||||
|
public static string GetMessage()
|
||||||
|
{
|
||||||
|
return "Hello from HelperBuiltIn1 class!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class HelperBuiltIn2
|
||||||
|
{
|
||||||
|
public static string GetMessage()
|
||||||
|
{
|
||||||
|
return "Hello from HelperBuiltIn2 class!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class IncludeThis
|
||||||
|
{
|
||||||
|
public static string GetMessage()
|
||||||
|
{
|
||||||
|
return "Hello from IncludeThis class!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine(IncludeThis.GetMessage());
|
||||||
|
Console.WriteLine(HelperBuiltIn1.GetMessage());
|
||||||
|
Console.WriteLine(HelperBuiltIn2.GetMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"compileBuiltIn": [ "Program.cs", "IncludeThis.cs", "../HelperBuiltIn1.cs", "../HelperBuiltIn2.cs" ],
|
||||||
|
"buildOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
This does not compile but is used to test compile exclusion.
|
|
@ -0,0 +1 @@
|
||||||
|
This does not compile but is used to test compile exclusion.
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Hello World!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"compileExclude": "ExcludeThis1.cs",
|
||||||
|
"exclude": [ "ExcludeThis2.cs" ],
|
||||||
|
"buildOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Helper1
|
||||||
|
{
|
||||||
|
public static string GetMessage()
|
||||||
|
{
|
||||||
|
return "Hello from Helper1 class!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Helper2
|
||||||
|
{
|
||||||
|
public static string GetMessage()
|
||||||
|
{
|
||||||
|
return "Hello from Helper2 class!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class IncludeThis
|
||||||
|
{
|
||||||
|
public static string GetMessage()
|
||||||
|
{
|
||||||
|
return "Hello from IncludeThis class!";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine(IncludeThis.GetMessage());
|
||||||
|
Console.WriteLine(Helper1.GetMessage());
|
||||||
|
Console.WriteLine(Helper2.GetMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"compile": "../Helper1.cs",
|
||||||
|
"compileFiles": "../Helper2.cs",
|
||||||
|
"buildOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Test content file that should be included.
|
|
@ -0,0 +1 @@
|
||||||
|
Test content file that should be included.
|
|
@ -0,0 +1 @@
|
||||||
|
Test content file that should be included.
|
|
@ -0,0 +1 @@
|
||||||
|
Test content file that should be included.
|
|
@ -0,0 +1 @@
|
||||||
|
Test content file that should be excluded.
|
|
@ -0,0 +1 @@
|
||||||
|
Test content file that should be excluded.
|
|
@ -0,0 +1 @@
|
||||||
|
Test content file that should be included.
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Hello World!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"content": "*.txt",
|
||||||
|
"contentExclude": "ExcludeThis1.txt",
|
||||||
|
"contentFiles": [ "../ContentFile1.txt", "../ContentFile2.txt" ],
|
||||||
|
"contentBuiltIn": [ "../ContentFileBuiltIn1.txt", "../ContentFileBuiltIn2.txt" ],
|
||||||
|
"publishExclude": "ExcludeThis2.txt",
|
||||||
|
"buildOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var thisAssembly = typeof(Program).GetTypeInfo().Assembly;
|
||||||
|
var resources = from resourceName in thisAssembly.GetManifestResourceNames()
|
||||||
|
select resourceName;
|
||||||
|
|
||||||
|
var resourceNames = string.Join(",", resources);
|
||||||
|
Console.WriteLine($"{resources.Count()} Resources Found: {resourceNames}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"namedResource": [ "My.Alias", "Strings.resx" ],
|
||||||
|
"buildOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
Test pack content file.
|
|
@ -0,0 +1 @@
|
||||||
|
Test pack content file.
|
|
@ -0,0 +1,12 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Hello World!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,32 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"projectUrl": "http://projecturl/",
|
||||||
|
"licenseUrl": "http://licenseurl/",
|
||||||
|
"iconUrl": "http://iconurl/",
|
||||||
|
"owners": [ "owner1", "owner2" ],
|
||||||
|
"tags": [ "tag1", "tag2" ],
|
||||||
|
"releaseNotes": "releaseNotes",
|
||||||
|
"requireLicenseAcceptance": true,
|
||||||
|
"summary": "summary",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "http://url/"
|
||||||
|
},
|
||||||
|
"packInclude": [ "Content1.txt", "Content2.txt" ],
|
||||||
|
"buildOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,123 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="hello" xml:space="preserve">
|
||||||
|
<value>Hello World!</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -0,0 +1,123 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="hello" xml:space="preserve">
|
||||||
|
<value>Hello World!</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var thisAssembly = typeof(Program).GetTypeInfo().Assembly;
|
||||||
|
var resources = from resourceName in thisAssembly.GetManifestResourceNames()
|
||||||
|
select resourceName;
|
||||||
|
|
||||||
|
var resourceNames = string.Join(",", resources);
|
||||||
|
Console.WriteLine($"{resources.Count()} Resources Found: {resourceNames}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,123 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="hello" xml:space="preserve">
|
||||||
|
<value>Hello World!</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"resourceBuiltIn": [ "../Strings1.resx", "../Strings2.resx" ],
|
||||||
|
"buildOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
This is not a resource file but is used to test resource exclusion.
|
|
@ -0,0 +1 @@
|
||||||
|
This is not a resource file but is used to test resource exclusion.
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var thisAssembly = typeof(Program).GetTypeInfo().Assembly;
|
||||||
|
var resources = from resourceName in thisAssembly.GetManifestResourceNames()
|
||||||
|
select resourceName;
|
||||||
|
|
||||||
|
var resourceNames = string.Join(",", resources);
|
||||||
|
Console.WriteLine($"{resources.Count()} Resources Found: {resourceNames}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"exclude": "Exclude1.resx",
|
||||||
|
"resourceExclude": [ "Exclude2.resx" ],
|
||||||
|
"buildOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,123 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="hello" xml:space="preserve">
|
||||||
|
<value>Hello World!</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -0,0 +1,123 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="hello" xml:space="preserve">
|
||||||
|
<value>Hello World!</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -0,0 +1,19 @@
|
||||||
|
using System;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
|
||||||
|
namespace ConsoleApplication
|
||||||
|
{
|
||||||
|
public class Program
|
||||||
|
{
|
||||||
|
public static void Main(string[] args)
|
||||||
|
{
|
||||||
|
var thisAssembly = typeof(Program).GetTypeInfo().Assembly;
|
||||||
|
var resources = from resourceName in thisAssembly.GetManifestResourceNames()
|
||||||
|
select resourceName;
|
||||||
|
|
||||||
|
var resourceNames = string.Join(",", resources);
|
||||||
|
Console.WriteLine($"{resources.Count()} Resources Found: {resourceNames}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,123 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 2.0
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">2.0</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
||||||
|
<comment>This is a comment</comment>
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="metadata">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" use="required" type="xsd:string" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="assembly">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:attribute name="alias" type="xsd:string" />
|
||||||
|
<xsd:attribute name="name" type="xsd:string" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
<xsd:attribute ref="xml:space" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>2.0</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<data name="hello" xml:space="preserve">
|
||||||
|
<value>Hello World!</value>
|
||||||
|
</data>
|
||||||
|
</root>
|
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"version": "1.0.0-*",
|
||||||
|
"resource": "../Strings1.resx",
|
||||||
|
"resourceFiles": [ "../Strings2.resx" ],
|
||||||
|
"buildOptions": {
|
||||||
|
"debugType": "portable",
|
||||||
|
"emitEntryPoint": true
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"frameworks": {
|
||||||
|
"netcoreapp1.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.App": {
|
||||||
|
"type": "platform",
|
||||||
|
"version": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": "dnxcore50"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,15 +0,0 @@
|
||||||
// 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 TestLibrary
|
|
||||||
{
|
|
||||||
public static class Helper
|
|
||||||
{
|
|
||||||
public static void SayHi()
|
|
||||||
{
|
|
||||||
Console.WriteLine("Hello there!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
{
|
|
||||||
"version": "1.0.0-*",
|
|
||||||
"compilationOptions": {
|
|
||||||
"xmlDoc": true
|
|
||||||
},
|
|
||||||
"packInclude": {},
|
|
||||||
"dependencies": {
|
|
||||||
"NETStandard.Library": "1.6.0"
|
|
||||||
},
|
|
||||||
"frameworks": {
|
|
||||||
"netstandard1.5": {}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -165,7 +165,8 @@ namespace Microsoft.DotNet.Internal.ProjectModel
|
||||||
|
|
||||||
// Project files
|
// Project files
|
||||||
project.Files = new ProjectFilesCollection(rawProject, project.ProjectDirectory, project.ProjectFilePath);
|
project.Files = new ProjectFilesCollection(rawProject, project.ProjectDirectory, project.ProjectFilePath);
|
||||||
AddProjectFilesCollectionDiagnostics(rawProject, project);
|
AddProjectFilesDeprecationDiagnostics(rawProject, project);
|
||||||
|
ConvertDeprecatedToSupportedFormat(rawProject);
|
||||||
|
|
||||||
var commands = rawProject.Value<JToken>("commands") as JObject;
|
var commands = rawProject.Value<JToken>("commands") as JObject;
|
||||||
if (commands != null)
|
if (commands != null)
|
||||||
|
@ -758,10 +759,14 @@ namespace Microsoft.DotNet.Internal.ProjectModel
|
||||||
|
|
||||||
if (rawPackOptions != null)
|
if (rawPackOptions != null)
|
||||||
{
|
{
|
||||||
var packOptionValue = rawPackOptions.Value<T>(option);
|
var hasOption = rawPackOptions.Value<JToken>(option) != null;
|
||||||
if (packOptionValue != null)
|
if (hasOption)
|
||||||
{
|
{
|
||||||
return packOptionValue;
|
var packOptionValue = rawPackOptions.Value<T>(option);
|
||||||
|
if (packOptionValue != null)
|
||||||
|
{
|
||||||
|
return packOptionValue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -807,37 +812,45 @@ namespace Microsoft.DotNet.Internal.ProjectModel
|
||||||
return File.Exists(projectPath);
|
return File.Exists(projectPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddProjectFilesCollectionDiagnostics(JObject rawProject, Project project)
|
private static void AddProjectFilesDeprecationDiagnostics(JObject rawProject, Project project)
|
||||||
{
|
{
|
||||||
var compileWarning = "'compile' in 'buildOptions'";
|
var compileWarning = "'compile' in 'buildOptions'";
|
||||||
AddDiagnosticMesage(rawProject, project, "compile", compileWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "compile", compileWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "compileExclude", compileWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "compileExclude", compileWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "compileFiles", compileWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "compileFiles", compileWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "compileBuiltIn", compileWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "compileBuiltIn", compileWarning);
|
||||||
|
|
||||||
var resourceWarning = "'embed' in 'buildOptions'";
|
var resourceWarning = "'embed' in 'buildOptions'";
|
||||||
AddDiagnosticMesage(rawProject, project, "resource", resourceWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "resource", resourceWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "resourceExclude", resourceWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "resourceExclude", resourceWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "resourceFiles", resourceWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "resourceFiles", resourceWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "resourceBuiltIn", resourceWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "resourceBuiltIn", resourceWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "namedResource", resourceWarning);
|
// Issue: https://github.com/dotnet/cli/issues/5471
|
||||||
|
// This is why we mark it as an error which will fail migration.
|
||||||
|
AddDeprecatedDiagnosticMessage(
|
||||||
|
rawProject,
|
||||||
|
project,
|
||||||
|
"namedResource",
|
||||||
|
resourceWarning,
|
||||||
|
DiagnosticMessageSeverity.Error);
|
||||||
|
|
||||||
var contentWarning = "'publishOptions' to publish or 'copyToOutput' in 'buildOptions' to copy to build output";
|
var contentWarning = "'publishOptions' to publish or 'copyToOutput' in 'buildOptions' to copy to build output";
|
||||||
AddDiagnosticMesage(rawProject, project, "content", contentWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "content", contentWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "contentExclude", contentWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "contentExclude", contentWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "contentFiles", contentWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "contentFiles", contentWarning);
|
||||||
AddDiagnosticMesage(rawProject, project, "contentBuiltIn", contentWarning);
|
AddDeprecatedDiagnosticMessage(rawProject, project, "contentBuiltIn", contentWarning);
|
||||||
|
|
||||||
AddDiagnosticMesage(rawProject, project, "packInclude", "'files' in 'packOptions'");
|
AddDeprecatedDiagnosticMessage(rawProject, project, "packInclude", "'files' in 'packOptions'");
|
||||||
AddDiagnosticMesage(rawProject, project, "publishExclude", "'publishOptions'");
|
AddDeprecatedDiagnosticMessage(rawProject, project, "publishExclude", "'publishOptions'");
|
||||||
AddDiagnosticMesage(rawProject, project, "exclude", "'exclude' within 'compile' or 'embed'");
|
AddDeprecatedDiagnosticMessage(rawProject, project, "exclude", "'exclude' within 'compile' or 'embed'");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AddDiagnosticMesage(
|
private static void AddDeprecatedDiagnosticMessage(
|
||||||
JObject rawProject,
|
JObject rawProject,
|
||||||
Project project,
|
Project project,
|
||||||
string option,
|
string option,
|
||||||
string message)
|
string message,
|
||||||
|
DiagnosticMessageSeverity severity = DiagnosticMessageSeverity.Warning)
|
||||||
{
|
{
|
||||||
var lineInfo = rawProject.Value<IJsonLineInfo>(option);
|
var lineInfo = rawProject.Value<IJsonLineInfo>(option);
|
||||||
if (lineInfo == null)
|
if (lineInfo == null)
|
||||||
|
@ -850,11 +863,132 @@ namespace Microsoft.DotNet.Internal.ProjectModel
|
||||||
ErrorCodes.DOTNET1015,
|
ErrorCodes.DOTNET1015,
|
||||||
$"The '{option}' option is deprecated. Use {message} instead.",
|
$"The '{option}' option is deprecated. Use {message} instead.",
|
||||||
project.ProjectFilePath,
|
project.ProjectFilePath,
|
||||||
DiagnosticMessageSeverity.Warning,
|
severity,
|
||||||
lineInfo.LineNumber,
|
lineInfo.LineNumber,
|
||||||
lineInfo.LinePosition));
|
lineInfo.LinePosition));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void ConvertDeprecatedToSupportedFormat(JObject rawProject)
|
||||||
|
{
|
||||||
|
ConvertToBuildOptionsCompile(rawProject);
|
||||||
|
ConvertToBuildOptionsEmbed(rawProject);
|
||||||
|
ConvertToBuildOptionsCopyToOutput(rawProject);
|
||||||
|
ConvertToPackOptions(rawProject);
|
||||||
|
ConvertToPublishOptions(rawProject);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ConvertToBuildOptionsCompile(JObject rawProject)
|
||||||
|
{
|
||||||
|
var jpath = "buildOptions.compile";
|
||||||
|
if (AreDeprecatedOptionsIgnored(rawProject, jpath))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "compile", "include");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "exclude", "exclude");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "compileExclude", "excludeFiles");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "compileFiles", "includeFiles");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, $"{jpath}.builtIns", "compileBuiltIn", "include");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ConvertToBuildOptionsEmbed(JObject rawProject)
|
||||||
|
{
|
||||||
|
var jpath = "buildOptions.embed";
|
||||||
|
if (AreDeprecatedOptionsIgnored(rawProject, jpath))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "resource", "include");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "exclude", "exclude");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "resourceExclude", "excludeFiles");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "resourceFiles", "includeFiles");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, $"{jpath}.builtIns", "resourceBuiltIn", "include");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ConvertToBuildOptionsCopyToOutput(JObject rawProject)
|
||||||
|
{
|
||||||
|
var jpath = "buildOptions.copyToOutput";
|
||||||
|
if (AreDeprecatedOptionsIgnored(rawProject, jpath))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "content", "include");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "contentExclude", "excludeFiles");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "contentFiles", "includeFiles");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, $"{jpath}.builtIns", "contentBuiltIn", "include");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ConvertToPackOptions(JObject rawProject)
|
||||||
|
{
|
||||||
|
var jpath = "packOptions";
|
||||||
|
if (AreDeprecatedOptionsIgnored(rawProject, jpath))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, $"{jpath}.files", "packInclude", "include");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ConvertToPublishOptions(JObject rawProject)
|
||||||
|
{
|
||||||
|
var jpath = "publishOptions";
|
||||||
|
if (AreDeprecatedOptionsIgnored(rawProject, jpath))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "content", "include");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "publishExclude", "exclude");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "contentExclude", "excludeFiles");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, jpath, "contentFiles", "includeFiles");
|
||||||
|
ConvertFromDeprecatedFormat(rawProject, $"{jpath}.builtIns", "contentBuiltIn", "include");
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool AreDeprecatedOptionsIgnored(JObject rawProject, string jpathToNewFormatObject)
|
||||||
|
{
|
||||||
|
// If the node already exists this means that the project.json file contained both the old and
|
||||||
|
// new format. In these cases the project.json build ignores the deprecated format and just uses
|
||||||
|
// the new format.
|
||||||
|
return (rawProject.SelectToken(jpathToNewFormatObject) != null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ConvertFromDeprecatedFormat(
|
||||||
|
JObject rawProject,
|
||||||
|
string jpathToObject,
|
||||||
|
string deprecatedKey,
|
||||||
|
string newKey
|
||||||
|
)
|
||||||
|
{
|
||||||
|
var deprecatedValue = rawProject.Value<JToken>(deprecatedKey);
|
||||||
|
if (deprecatedValue != null)
|
||||||
|
{
|
||||||
|
var objectNode = GetOrCreateObjectHierarchy(rawProject, jpathToObject);
|
||||||
|
objectNode[newKey] = deprecatedValue.DeepClone();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static JObject GetOrCreateObjectHierarchy(JObject rawProject, string jpath)
|
||||||
|
{
|
||||||
|
var currentObject = rawProject as JObject;
|
||||||
|
|
||||||
|
var objectHierarchy = jpath.Split('.');
|
||||||
|
foreach (var name in objectHierarchy)
|
||||||
|
{
|
||||||
|
var childObject = currentObject.Value<JObject>(name);
|
||||||
|
if (childObject == null)
|
||||||
|
{
|
||||||
|
childObject = new JObject();
|
||||||
|
currentObject[name] = childObject;
|
||||||
|
}
|
||||||
|
currentObject = childObject;
|
||||||
|
}
|
||||||
|
|
||||||
|
return currentObject;
|
||||||
|
}
|
||||||
|
|
||||||
private static bool TryGetStringEnumerable(JToken token, out IEnumerable<string> result)
|
private static bool TryGetStringEnumerable(JToken token, out IEnumerable<string> result)
|
||||||
{
|
{
|
||||||
IEnumerable<string> values;
|
IEnumerable<string> values;
|
||||||
|
|
|
@ -9,6 +9,7 @@ using Microsoft.Build.Construction;
|
||||||
using Microsoft.DotNet.Internal.ProjectModel;
|
using Microsoft.DotNet.Internal.ProjectModel;
|
||||||
using Microsoft.DotNet.Internal.ProjectModel.Graph;
|
using Microsoft.DotNet.Internal.ProjectModel.Graph;
|
||||||
using Microsoft.DotNet.Cli;
|
using Microsoft.DotNet.Cli;
|
||||||
|
using Microsoft.DotNet.Cli.Utils;
|
||||||
using Microsoft.DotNet.Cli.Utils.ExceptionExtensions;
|
using Microsoft.DotNet.Cli.Utils.ExceptionExtensions;
|
||||||
using Microsoft.DotNet.Cli.Sln.Internal;
|
using Microsoft.DotNet.Cli.Sln.Internal;
|
||||||
using Microsoft.DotNet.ProjectJsonMigration.Rules;
|
using Microsoft.DotNet.ProjectJsonMigration.Rules;
|
||||||
|
@ -41,10 +42,11 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
IEnumerable<ProjectDependency> projectDependencies = null;
|
IEnumerable<ProjectDependency> projectDependencies = null;
|
||||||
var projectMigrationReports = new List<ProjectMigrationReport>();
|
var projectMigrationReports = new List<ProjectMigrationReport>();
|
||||||
|
|
||||||
|
List<string> warnings = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// Verify up front so we can prefer these errors over an unresolved project dependency
|
// Verify up front so we can prefer these errors over an unresolved project dependency
|
||||||
VerifyInputs(rootInputs, rootSettings);
|
VerifyInputs(rootInputs, rootSettings, out warnings);
|
||||||
|
|
||||||
projectMigrationReports.Add(MigrateProject(rootSettings));
|
projectMigrationReports.Add(MigrateProject(rootSettings));
|
||||||
|
|
||||||
|
@ -67,7 +69,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
rootSettings.ProjectDirectory,
|
rootSettings.ProjectDirectory,
|
||||||
rootInputs?.DefaultProjectContext?.GetProjectName(),
|
rootInputs?.DefaultProjectContext?.GetProjectName(),
|
||||||
new List<MigrationError> {e.Error},
|
new List<MigrationError> {e.Error},
|
||||||
null)
|
warnings)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,6 +145,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
var projectName = migrationRuleInputs.DefaultProjectContext.GetProjectName();
|
var projectName = migrationRuleInputs.DefaultProjectContext.GetProjectName();
|
||||||
var outputProject = Path.Combine(migrationSettings.OutputDirectory, projectName + ".csproj");
|
var outputProject = Path.Combine(migrationSettings.OutputDirectory, projectName + ".csproj");
|
||||||
|
|
||||||
|
List<string> warnings = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (File.Exists(outputProject))
|
if (File.Exists(outputProject))
|
||||||
|
@ -165,7 +168,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VerifyInputs(migrationRuleInputs, migrationSettings);
|
VerifyInputs(migrationRuleInputs, migrationSettings, out warnings);
|
||||||
|
|
||||||
SetupOutputDirectory(migrationSettings.ProjectDirectory, migrationSettings.OutputDirectory);
|
SetupOutputDirectory(migrationSettings.ProjectDirectory, migrationSettings.OutputDirectory);
|
||||||
|
|
||||||
|
@ -178,7 +181,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
exc.Error
|
exc.Error
|
||||||
};
|
};
|
||||||
|
|
||||||
return new ProjectMigrationReport(migrationSettings.ProjectDirectory, projectName, error, null);
|
return new ProjectMigrationReport(migrationSettings.ProjectDirectory, projectName, error, warnings);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<string> csprojDependencies = null;
|
List<string> csprojDependencies = null;
|
||||||
|
@ -207,7 +210,7 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
projectName,
|
projectName,
|
||||||
outputProject,
|
outputProject,
|
||||||
null,
|
null,
|
||||||
null,
|
warnings,
|
||||||
csprojDependencies);
|
csprojDependencies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -234,13 +237,22 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
return new MigrationRuleInputs(projectContexts, templateMSBuildProject, itemGroup, propertyGroup, xproj);
|
return new MigrationRuleInputs(projectContexts, templateMSBuildProject, itemGroup, propertyGroup, xproj);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void VerifyInputs(MigrationRuleInputs migrationRuleInputs, MigrationSettings migrationSettings)
|
private void VerifyInputs(
|
||||||
|
MigrationRuleInputs migrationRuleInputs,
|
||||||
|
MigrationSettings migrationSettings,
|
||||||
|
out List<string> warningMessages
|
||||||
|
)
|
||||||
{
|
{
|
||||||
VerifyProject(migrationRuleInputs.ProjectContexts, migrationSettings.ProjectDirectory);
|
VerifyProject(migrationRuleInputs.ProjectContexts, migrationSettings.ProjectDirectory, out warningMessages);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void VerifyProject(IEnumerable<ProjectContext> projectContexts, string projectDirectory)
|
private void VerifyProject(
|
||||||
|
IEnumerable<ProjectContext> projectContexts,
|
||||||
|
string projectDirectory,
|
||||||
|
out List<string> warningMessages)
|
||||||
{
|
{
|
||||||
|
warningMessages = null;
|
||||||
|
|
||||||
if (!projectContexts.Any())
|
if (!projectContexts.Any())
|
||||||
{
|
{
|
||||||
MigrationErrorCodes.MIGRATE1013(String.Format(LocalizableStrings.MIGRATE1013Arg, projectDirectory)).Throw();
|
MigrationErrorCodes.MIGRATE1013(String.Format(LocalizableStrings.MIGRATE1013Arg, projectDirectory)).Throw();
|
||||||
|
@ -251,9 +263,29 @@ namespace Microsoft.DotNet.ProjectJsonMigration
|
||||||
var diagnostics = defaultProjectContext.ProjectFile.Diagnostics;
|
var diagnostics = defaultProjectContext.ProjectFile.Diagnostics;
|
||||||
if (diagnostics.Any())
|
if (diagnostics.Any())
|
||||||
{
|
{
|
||||||
MigrationErrorCodes.MIGRATE1011(
|
var warnings = diagnostics.Where(d => d.Severity == DiagnosticMessageSeverity.Warning);
|
||||||
String.Format("{0}{1}{2}", projectDirectory, Environment.NewLine, string.Join(Environment.NewLine, diagnostics.Select(d => FormatDiagnosticMessage(d)))))
|
if (warnings.Any())
|
||||||
.Throw();
|
{
|
||||||
|
var migrationError = MigrationErrorCodes.MIGRATE1011(String.Format(
|
||||||
|
"{0}{1}{2}",
|
||||||
|
projectDirectory,
|
||||||
|
Environment.NewLine,
|
||||||
|
string.Join(Environment.NewLine, diagnostics.Select(d => FormatDiagnosticMessage(d)))));
|
||||||
|
|
||||||
|
warningMessages = new List<string>();
|
||||||
|
warningMessages.Add(migrationError.GetFormattedErrorMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
var errors = diagnostics.Where(d => d.Severity == DiagnosticMessageSeverity.Error);
|
||||||
|
if (errors.Any())
|
||||||
|
{
|
||||||
|
MigrationErrorCodes.MIGRATE1011(String.Format(
|
||||||
|
"{0}{1}{2}",
|
||||||
|
projectDirectory,
|
||||||
|
Environment.NewLine,
|
||||||
|
string.Join(Environment.NewLine, diagnostics.Select(d => FormatDiagnosticMessage(d)))))
|
||||||
|
.Throw();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var compilerName =
|
var compilerName =
|
||||||
|
|
|
@ -279,6 +279,8 @@ namespace Microsoft.DotNet.Tools.Migrate
|
||||||
{
|
{
|
||||||
var errorContent = GetProjectReportErrorContent(projectMigrationReport, colored: true);
|
var errorContent = GetProjectReportErrorContent(projectMigrationReport, colored: true);
|
||||||
var successContent = GetProjectReportSuccessContent(projectMigrationReport, colored: true);
|
var successContent = GetProjectReportSuccessContent(projectMigrationReport, colored: true);
|
||||||
|
var warningContent = GetProjectReportWarningContent(projectMigrationReport, colored: true);
|
||||||
|
Reporter.Output.WriteLine(warningContent);
|
||||||
if (!string.IsNullOrEmpty(errorContent))
|
if (!string.IsNullOrEmpty(errorContent))
|
||||||
{
|
{
|
||||||
Reporter.Error.WriteLine(errorContent);
|
Reporter.Error.WriteLine(errorContent);
|
||||||
|
@ -307,6 +309,8 @@ namespace Microsoft.DotNet.Tools.Migrate
|
||||||
{
|
{
|
||||||
var errorContent = GetProjectReportErrorContent(projectMigrationReport, colored: colored);
|
var errorContent = GetProjectReportErrorContent(projectMigrationReport, colored: colored);
|
||||||
var successContent = GetProjectReportSuccessContent(projectMigrationReport, colored: colored);
|
var successContent = GetProjectReportSuccessContent(projectMigrationReport, colored: colored);
|
||||||
|
var warningContent = GetProjectReportWarningContent(projectMigrationReport, colored: colored);
|
||||||
|
sb.AppendLine(warningContent);
|
||||||
if (!string.IsNullOrEmpty(errorContent))
|
if (!string.IsNullOrEmpty(errorContent))
|
||||||
{
|
{
|
||||||
sb.AppendLine(errorContent);
|
sb.AppendLine(errorContent);
|
||||||
|
@ -348,6 +352,19 @@ namespace Microsoft.DotNet.Tools.Migrate
|
||||||
projectMigrationReport.ProjectDirectory));
|
projectMigrationReport.ProjectDirectory));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetProjectReportWarningContent(ProjectMigrationReport projectMigrationReport, bool colored)
|
||||||
|
{
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
Func<string, string> YellowIfColored = (str) => colored ? str.Yellow() : str;
|
||||||
|
|
||||||
|
foreach (var warning in projectMigrationReport.Warnings)
|
||||||
|
{
|
||||||
|
sb.AppendLine(YellowIfColored(warning));
|
||||||
|
}
|
||||||
|
|
||||||
|
return sb.ToString();
|
||||||
|
}
|
||||||
|
|
||||||
private string GetProjectReportErrorContent(ProjectMigrationReport projectMigrationReport, bool colored)
|
private string GetProjectReportErrorContent(ProjectMigrationReport projectMigrationReport, bool colored)
|
||||||
{
|
{
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
|
|
|
@ -6,6 +6,7 @@ using FluentAssertions;
|
||||||
using Microsoft.Build.Construction;
|
using Microsoft.Build.Construction;
|
||||||
using Microsoft.DotNet.ProjectJsonMigration.Rules;
|
using Microsoft.DotNet.ProjectJsonMigration.Rules;
|
||||||
using Microsoft.DotNet.Internal.ProjectModel;
|
using Microsoft.DotNet.Internal.ProjectModel;
|
||||||
|
using Microsoft.DotNet.TestFramework;
|
||||||
using Microsoft.DotNet.Tools.Common;
|
using Microsoft.DotNet.Tools.Common;
|
||||||
using Microsoft.DotNet.Tools.Test.Utilities;
|
using Microsoft.DotNet.Tools.Test.Utilities;
|
||||||
using NuGet.Frameworks;
|
using NuGet.Frameworks;
|
||||||
|
@ -39,24 +40,54 @@ namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
public void ItHasErrorWhenMigratingADeprecatedProjectJson()
|
public void ItHasWarningWhenMigratingADeprecatedProjectJson()
|
||||||
{
|
{
|
||||||
var testProjectDirectory =
|
var testProjectDirectory = TestAssets
|
||||||
TestAssetsManager.CreateTestInstance("TestLibraryWithDeprecatedProjectFile", callingMethod: "z")
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileOptions")
|
||||||
.Path;
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.GetDirectory("project")
|
||||||
|
.FullName;
|
||||||
|
|
||||||
var mockProj = ProjectRootElement.Create();
|
var mockProj = ProjectRootElement.Create();
|
||||||
var testSettings = MigrationSettings.CreateMigrationSettingsTestHook(testProjectDirectory, testProjectDirectory, mockProj);
|
var testSettings = MigrationSettings.CreateMigrationSettingsTestHook(
|
||||||
|
testProjectDirectory,
|
||||||
|
testProjectDirectory,
|
||||||
|
mockProj);
|
||||||
|
|
||||||
var projectMigrator = new ProjectMigrator(new FakeEmptyMigrationRule());
|
var projectMigrator = new ProjectMigrator(new FakeEmptyMigrationRule());
|
||||||
var report = projectMigrator.Migrate(testSettings);
|
var report = projectMigrator.Migrate(testSettings);
|
||||||
|
|
||||||
var projectReport = report.ProjectMigrationReports.First();
|
var projectReport = report.ProjectMigrationReports.First();
|
||||||
|
var warningMessage = projectReport.Warnings.First();
|
||||||
|
warningMessage.Should().Contain("MIGRATE1011::Deprecated Project:");
|
||||||
|
warningMessage.Should().Contain("The 'compile' option is deprecated. Use 'compile' in 'buildOptions' instead. (line: 3, file:");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ItHasErrorWhenMigratingADeprecatedNamedResourceOptionProjectJson()
|
||||||
|
{
|
||||||
|
var testProjectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedNamedResourceOption")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.FullName;
|
||||||
|
|
||||||
|
var mockProj = ProjectRootElement.Create();
|
||||||
|
var testSettings = MigrationSettings.CreateMigrationSettingsTestHook(
|
||||||
|
testProjectDirectory,
|
||||||
|
testProjectDirectory,
|
||||||
|
mockProj);
|
||||||
|
|
||||||
|
var projectMigrator = new ProjectMigrator(new FakeEmptyMigrationRule());
|
||||||
|
var report = projectMigrator.Migrate(testSettings);
|
||||||
|
|
||||||
|
var projectReport = report.ProjectMigrationReports.First();
|
||||||
var errorMessage = projectReport.Errors.First().GetFormattedErrorMessage();
|
var errorMessage = projectReport.Errors.First().GetFormattedErrorMessage();
|
||||||
errorMessage.Should().Contain("MIGRATE1011::Deprecated Project:");
|
errorMessage.Should().Contain("MIGRATE1011::Deprecated Project:");
|
||||||
errorMessage.Should().Contain("The 'packInclude' option is deprecated. Use 'files' in 'packOptions' instead. (line: 6, file:");
|
errorMessage.Should().Contain("The 'namedResource' option is deprecated. Use 'embed' in 'buildOptions' instead. (line: 3, file:");
|
||||||
errorMessage.Should().Contain("The 'compilationOptions' option is deprecated. Use 'buildOptions' instead. (line: 3, file:");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[Fact]
|
[Fact]
|
||||||
|
|
|
@ -0,0 +1,546 @@
|
||||||
|
// 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 FluentAssertions;
|
||||||
|
using Microsoft.DotNet.TestFramework;
|
||||||
|
using Microsoft.DotNet.Tools.Test.Utilities;
|
||||||
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Xml.Linq;
|
||||||
|
using Xunit;
|
||||||
|
|
||||||
|
namespace Microsoft.DotNet.Migration.Tests
|
||||||
|
{
|
||||||
|
public class GivenThatIWantToMigrateDeprecatedProjects : TestBase
|
||||||
|
{
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedPackOptionsWarningsArePrinted()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedPackOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("migrate");
|
||||||
|
|
||||||
|
cmd.Should().Pass();
|
||||||
|
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'repository' option in the root is deprecated. Use it in 'packOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'projectUrl' option in the root is deprecated. Use it in 'packOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'licenseUrl' option in the root is deprecated. Use it in 'packOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'iconUrl' option in the root is deprecated. Use it in 'packOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'owners' option in the root is deprecated. Use it in 'packOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'tags' option in the root is deprecated. Use it in 'packOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'releaseNotes' option in the root is deprecated. Use it in 'packOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'requireLicenseAcceptance' option in the root is deprecated. Use it in 'packOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'summary' option in the root is deprecated. Use it in 'packOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'packInclude' option is deprecated. Use 'files' in 'packOptions' instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedPackOptionsItSucceeds()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedPackOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("migrate")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("restore")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("build -c Debug")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("pack -c Debug")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
var outputDir = projectDirectory.GetDirectory("bin", "Debug");
|
||||||
|
outputDir.Should().Exist()
|
||||||
|
.And.HaveFile("PJAppWithDeprecatedPackOptions.1.0.0.nupkg");
|
||||||
|
|
||||||
|
var outputPackage = outputDir.GetFile("PJAppWithDeprecatedPackOptions.1.0.0.nupkg");
|
||||||
|
|
||||||
|
var zip = ZipFile.Open(outputPackage.FullName, ZipArchiveMode.Read);
|
||||||
|
zip.Entries.Should().Contain(e => e.FullName == "PJAppWithDeprecatedPackOptions.nuspec")
|
||||||
|
.And.Contain(e => e.FullName == "content/Content1.txt")
|
||||||
|
.And.Contain(e => e.FullName == "content/Content2.txt");
|
||||||
|
|
||||||
|
var manifestReader = new StreamReader(
|
||||||
|
zip.Entries.First(e => e.FullName == "PJAppWithDeprecatedPackOptions.nuspec").Open());
|
||||||
|
|
||||||
|
// NOTE: Commented out those that are not migrated.
|
||||||
|
// https://microsoft.sharepoint.com/teams/netfx/corefx/_layouts/15/WopiFrame.aspx?sourcedoc=%7B0cfbc196-0645-4781-84c6-5dffabd76bee%7D&action=edit&wd=target%28Planning%2FMSBuild%20CLI%20integration%2Eone%7C41D470DD-CF44-4595-8E05-0CE238864B55%2FProject%2Ejson%20Migration%7CA553D979-EBC6-484B-A12E-036E0730864A%2F%29
|
||||||
|
var nuspecXml = XDocument.Parse(manifestReader.ReadToEnd());
|
||||||
|
nuspecXml.Descendants().Single(e => e.Name.LocalName == "projectUrl").Value
|
||||||
|
.Should().Be("http://projecturl/");
|
||||||
|
nuspecXml.Descendants().Single(e => e.Name.LocalName == "licenseUrl").Value
|
||||||
|
.Should().Be("http://licenseurl/");
|
||||||
|
nuspecXml.Descendants().Single(e => e.Name.LocalName == "iconUrl").Value
|
||||||
|
.Should().Be("http://iconurl/");
|
||||||
|
//nuspecXml.Descendants().Single(e => e.Name.LocalName == "owners").Value
|
||||||
|
// .Should().Be("owner1,owner2");
|
||||||
|
nuspecXml.Descendants().Single(e => e.Name.LocalName == "tags").Value
|
||||||
|
.Should().Be("tag1 tag2");
|
||||||
|
nuspecXml.Descendants().Single(e => e.Name.LocalName == "releaseNotes").Value
|
||||||
|
.Should().Be("releaseNotes");
|
||||||
|
nuspecXml.Descendants().Single(e => e.Name.LocalName == "requireLicenseAcceptance").Value
|
||||||
|
.Should().Be("true");
|
||||||
|
//nuspecXml.Descendants().Single(e => e.Name.LocalName == "summary").Value
|
||||||
|
// .Should().Be("summary");
|
||||||
|
|
||||||
|
var repositoryNode = nuspecXml.Descendants().Single(e => e.Name.LocalName == "repository");
|
||||||
|
repositoryNode.Attributes("type").Single().Value.Should().Be("git");
|
||||||
|
repositoryNode.Attributes("url").Single().Value.Should().Be("http://url/");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedCompilationOptionsWarningsArePrinted()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompilationOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("migrate");
|
||||||
|
|
||||||
|
cmd.Should().Pass();
|
||||||
|
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'compilerName' option in the root is deprecated. Use it in 'buildOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'compilationOptions' option is deprecated. Use 'buildOptions' instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedCompilationOptionsItSucceeds()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompilationOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("migrate")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("restore")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("build -c Debug")
|
||||||
|
.Should().Pass();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedContentOptionsWarningsArePrinted()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedContentOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("migrate");
|
||||||
|
|
||||||
|
cmd.Should().Pass();
|
||||||
|
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'content' option is deprecated. Use 'publishOptions' to publish or 'copyToOutput' in 'buildOptions' to copy to build output instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'contentExclude' option is deprecated. Use 'publishOptions' to publish or 'copyToOutput' in 'buildOptions' to copy to build output instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'contentFiles' option is deprecated. Use 'publishOptions' to publish or 'copyToOutput' in 'buildOptions' to copy to build output instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'contentBuiltIn' option is deprecated. Use 'publishOptions' to publish or 'copyToOutput' in 'buildOptions' to copy to build output instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedContentOptionsItSucceeds()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedContentOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.GetDirectory("project");
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("migrate")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("restore")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("build -c Debug")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("publish -c Debug")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
var outputDir = projectDirectory.GetDirectory("bin", "Debug", "netcoreapp1.0");
|
||||||
|
outputDir.Should().Exist()
|
||||||
|
.And.HaveFiles(new[]
|
||||||
|
{
|
||||||
|
"ContentFile1.txt",
|
||||||
|
"ContentFile2.txt",
|
||||||
|
"ContentFileBuiltIn1.txt",
|
||||||
|
"ContentFileBuiltIn2.txt",
|
||||||
|
"IncludeThis.txt",
|
||||||
|
});
|
||||||
|
Directory.Exists(Path.Combine(outputDir.FullName, "ExcludeThis1.txt")).Should().BeFalse();
|
||||||
|
Directory.Exists(Path.Combine(outputDir.FullName, "ExcludeThis2.txt")).Should().BeFalse();
|
||||||
|
|
||||||
|
var publishDir = projectDirectory.GetDirectory("bin", "Debug", "netcoreapp1.0", "publish");
|
||||||
|
publishDir.Should().Exist()
|
||||||
|
.And.HaveFiles(new[]
|
||||||
|
{
|
||||||
|
"ContentFile1.txt",
|
||||||
|
"ContentFile2.txt",
|
||||||
|
"ContentFileBuiltIn1.txt",
|
||||||
|
"ContentFileBuiltIn2.txt",
|
||||||
|
"IncludeThis.txt",
|
||||||
|
});
|
||||||
|
Directory.Exists(Path.Combine(publishDir.FullName, "ExcludeThis1.txt")).Should().BeFalse();
|
||||||
|
Directory.Exists(Path.Combine(publishDir.FullName, "ExcludeThis2.txt")).Should().BeFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedCompileOptionsWarningsArePrinted()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("migrate");
|
||||||
|
|
||||||
|
cmd.Should().Pass();
|
||||||
|
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'compile' option is deprecated. Use 'compile' in 'buildOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'compileFiles' option is deprecated. Use 'compile' in 'buildOptions' instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedCompileOptionsItSucceeds()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.GetDirectory("project");
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("migrate")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("restore")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("build -c Debug")
|
||||||
|
.Should().Pass();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedCompileBuiltInOptionsWarningsArePrinted()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileBuiltInOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("migrate");
|
||||||
|
|
||||||
|
cmd.Should().Pass();
|
||||||
|
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'compileBuiltIn' option is deprecated. Use 'compile' in 'buildOptions' instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedCompileBuiltInOptionsItSucceeds()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileBuiltInOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.GetDirectory("project");
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("migrate")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("restore")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
//Issue: https://github.com/dotnet/cli/issues/5467
|
||||||
|
//new DotnetCommand()
|
||||||
|
// .WithWorkingDirectory(projectDirectory)
|
||||||
|
// .Execute("build -c Debug")
|
||||||
|
// .Should().Pass();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedCompileExcludeOptionsWarningsArePrinted()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileExcludeOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("migrate");
|
||||||
|
|
||||||
|
cmd.Should().Pass();
|
||||||
|
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'compileExclude' option is deprecated. Use 'compile' in 'buildOptions' instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedCompileExcludeOptionsItSucceeds()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedCompileExcludeOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("migrate")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("restore")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
// Issue: https://github.com/dotnet/cli/issues/5461
|
||||||
|
//new DotnetCommand()
|
||||||
|
// .WithWorkingDirectory(projectDirectory)
|
||||||
|
// .Execute("build -c Debug")
|
||||||
|
// .Should().Pass();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedResourceOptionsWarningsArePrinted()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.GetDirectory("project");
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("migrate");
|
||||||
|
|
||||||
|
cmd.Should().Pass();
|
||||||
|
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'resource' option is deprecated. Use 'embed' in 'buildOptions' instead.");
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'resourceFiles' option is deprecated. Use 'embed' in 'buildOptions' instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedResourceOptionsItSucceeds()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.GetDirectory("project");
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("migrate")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("restore")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("build -c Debug")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("run -c Debug");
|
||||||
|
cmd.Should().Pass();
|
||||||
|
cmd.StdOut.Should().Contain("3 Resources Found:");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedResourceBuiltInOptionsWarningsArePrinted()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceBuiltInOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.GetDirectory("project");
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("migrate");
|
||||||
|
|
||||||
|
cmd.Should().Pass();
|
||||||
|
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'resourceBuiltIn' option is deprecated. Use 'embed' in 'buildOptions' instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingDeprecatedBuiltInResItSucceeds()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceBuiltInOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root
|
||||||
|
.GetDirectory("project");
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("migrate")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("restore")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("build -c Debug")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("run -c Debug");
|
||||||
|
cmd.Should().Pass();
|
||||||
|
// Issue: https://github.com/dotnet/cli/issues/5467
|
||||||
|
//cmd.StdOut.Should().Contain("2 Resources Found:");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedResourceExcludeOptionsWarningsArePrinted()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceExcludeOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
var cmd = new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.ExecuteWithCapturedOutput("migrate");
|
||||||
|
|
||||||
|
cmd.Should().Pass();
|
||||||
|
|
||||||
|
cmd.StdOut.Should().Contain(
|
||||||
|
"The 'resourceExclude' option is deprecated. Use 'embed' in 'buildOptions' instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void WhenMigratingAProjectWithDeprecatedResourceExcludeOptionsItSucceeds()
|
||||||
|
{
|
||||||
|
var projectDirectory = TestAssets
|
||||||
|
.GetProjectJson(TestAssetKinds.NonRestoredTestProjects, "PJAppWithDeprecatedResourceExcludeOptions")
|
||||||
|
.CreateInstance()
|
||||||
|
.WithSourceFiles()
|
||||||
|
.Root;
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("migrate")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
new DotnetCommand()
|
||||||
|
.WithWorkingDirectory(projectDirectory)
|
||||||
|
.Execute("restore")
|
||||||
|
.Should().Pass();
|
||||||
|
|
||||||
|
// Issue: https://github.com/dotnet/cli/issues/5461
|
||||||
|
//new DotnetCommand()
|
||||||
|
// .WithWorkingDirectory(projectDirectory)
|
||||||
|
// .Execute("build -c Debug")
|
||||||
|
// .Should().Pass();
|
||||||
|
|
||||||
|
//var cmd = new DotnetCommand()
|
||||||
|
// .WithWorkingDirectory(projectDirectory)
|
||||||
|
// .ExecuteWithCapturedOutput("run -c Debug");
|
||||||
|
//cmd.Should().Pass();
|
||||||
|
//cmd.StdOut.Should().Contain("0 Resources Found:");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue