diff --git a/BuildToolsVersion.txt b/BuildToolsVersion.txt index 353daa3660f..ad88e711d3b 100644 --- a/BuildToolsVersion.txt +++ b/BuildToolsVersion.txt @@ -1 +1 @@ -2.1.0-preview1-02609-02 +2.1.0-preview2-02621-01 diff --git a/BuildToolsVersion.txt.orig b/BuildToolsVersion.txt.orig new file mode 100644 index 00000000000..044b1a1d667 --- /dev/null +++ b/BuildToolsVersion.txt.orig @@ -0,0 +1,5 @@ +<<<<<<< HEAD +2.1.0-preview1-02609-02 +======= +2.1.0-preview3-02622-01 +>>>>>>> master diff --git a/Documentation/WCF-Web-Service-Reference-guide.md b/Documentation/WCF-Web-Service-Reference-guide.md deleted file mode 100644 index 6fa633770b2..00000000000 --- a/Documentation/WCF-Web-Service-Reference-guide.md +++ /dev/null @@ -1,49 +0,0 @@ -## Microsoft WCF Web Service Reference Provider - -Over the years, many Visual Studio developers have enjoyed the productivity that Add Service Reference provides when their .NET Framework projects needed to access Windows Communication Foundation (WCF) services. The WCF team is excited to introduce the WCF Connected Service for .NET Core and ASP.NET Core, a VS extension providing an experience like the Add Service Reference functionality. This tool retrieves metadata from a WCF service in the current solution, locally or on a network, and generates a .NET Core compatible source code file for a WCF client proxy that you can use to access the service. - - -### How to use the extension - -The WCF Web Service Reference VS connected service extension is applicable to projects created using the templates under Visual C# -> .Net Core, Visual C# -> .Net Standard and Visual C# -> Web -> ASP.NET CORE Web Application projects. - -Using the ASP.NET Core Web Application project template as an example, I will walk you through adding a WCF service reference to the project: -1. In Solution Explorer, double-click the Connected Services node of a project. A Connected Services page appears as shown below: - -![Connected Services tab](/Documentation/images/WCFCS-ConnectedServicesPage.png) - -2. On this page, click Microsoft WCF Web Service Reference Provider. This will bring up the Configure WCF Web Service Reference wizard: - -![Service Endpoint tab](/Documentation/images/WCFCS-ServiceEndpointPage.png) - -3. You can either click the Discover button to initiate a search for services that are contained in the current solution, enter a service URL in the Address box and click Go to search for services hosted at the address, or Browse to a WSDL file containing the service metadata information.  The services that are found will be displayed in the Services box and you can select the one you want to use. You can also enter the namespace for the generated code in the Namespace box. - -Once a service has been selected you can click Next to visit the Data Type Options and the Client Options pages.  Alternatively, you can click Finish to use default options. - -![Data types tab](/Documentation/images/WCFCS-DataTypesPage.png) - -The Data Type Options form offers a few settings for further refining the configuration for the generated service reference, Of particular interest is the option to reuse types in reference assemblies.  This is useful when types needed for generating the service reference code are already referenced in your project, and it is necessary to reuse the existing types to avoid a compile-time type clash. - -Depending on the number of project dependencies as well as other system performance factors, it may take some time for type information to be loaded into this form, the Finish button will be disabled during this time unless 'Reuse types' in reference assemblies check box is unchecked. - -4. Click Finish when you are done. - -![Progress window](/Documentation/images/WCFCS-ProgressWindow.png) - -This will download metadata from the WCF service, generate the service reference code in a file named 'reference.cs', and add it to your project under the Connected Services node. The project file (.csproj) will also be updated with NuGet package references required for your project to compile and run on the target platform. - -You can now create instances of the WCF client types generated by the tool and communicate with your web service as desired. - - -### Release Notes -* [Release history](/release-notes/WCF-Web-Service-Reference-notes.md) - - -### Known Issues -We are hard at work to address these known issues in future releases: - -* Reuse Types in referenced assemblies check box is disabled. This can happen when a project targets the full .NET Framework, e.g., ‘net46’ or targets multiple frameworks, e.g., ‘netcoreapp1.0;netcoreapp1.1’. Given the differences of API surface between different frameworks, it becomes challenging to reuse types in the same generated service reference code. To work around the issue, you can generate a service reference by temporarily updating the project to only target either one of .NET Core frameworks or .NET Standard. - - -### Feedback & Questions -If you have any questions or feedback, please [open an issue on GitHub](https://github.com/dotnet/wcf/issues/new) so we can follow up with you. You can also review any existing questions or issues [at this site](https://github.com/dotnet/wcf/issues?utf8=%E2%9C%93&q=is:issue%20label:tooling%20). diff --git a/DotnetCLIVersion.txt b/DotnetCLIVersion.txt index a13ab980216..eca07e4c1a8 100644 --- a/DotnetCLIVersion.txt +++ b/DotnetCLIVersion.txt @@ -1 +1 @@ -2.0.0-preview1-005977 \ No newline at end of file +2.1.2 diff --git a/dependencies.props.orig b/dependencies.props.orig new file mode 100644 index 00000000000..f95bba946b8 --- /dev/null +++ b/dependencies.props.orig @@ -0,0 +1,236 @@ + + + + + +<<<<<<< HEAD + 39ff9d67dee0e90452f4c23a7c9edf5b74cf1ff1 + 5aba8cba6e8ca210ff0b7ae9d54fcda40a719de4 + 6298244e25cf84d91e3cda9627315f2425274624 + 65f2e19b242b2d5ba1a3b058d01130cef8e8c045 + 65f2e19b242b2d5ba1a3b058d01130cef8e8c045 + 39ff9d67dee0e90452f4c23a7c9edf5b74cf1ff1 + 39ff9d67dee0e90452f4c23a7c9edf5b74cf1ff1 +======= + 7a677997e3bdfdffdbd9c210134db1eb80f0d959 + 7a677997e3bdfdffdbd9c210134db1eb80f0d959 + 7a677997e3bdfdffdbd9c210134db1eb80f0d959 + 6228d26347a4a79652347621b1d2a493f3ed9065 + 6228d26347a4a79652347621b1d2a493f3ed9065 + 7a677997e3bdfdffdbd9c210134db1eb80f0d959 + 7a677997e3bdfdffdbd9c210134db1eb80f0d959 +>>>>>>> master + + + + +<<<<<<< HEAD + preview1-26316-01 + preview1-26216-02 + 2.0.1 +======= + preview2-26322-01 + preview3-26322-06 + 2.1.0-preview1-26322-01 +>>>>>>> master + NETStandard.Library + +<<<<<<< HEAD + 4.5.0-preview1-26216-02 + 4.6.0-preview1-26216-02 +======= + 4.5.0-preview3-26322-06 + 4.6.0-preview2-26202-05 +>>>>>>> master + + beta-26226-00 + beta-26226-00 + DEPENDENCY 'TestILC.amd64ret' NOT FOUND + + + + + 1.0.3-prerelease-00921-01 + 2.2.0-preview1-26216-02 + 1.0.0-beta-build0015 + 2.1.0-preview1-02609-02 + +<<<<<<< HEAD + 2.1.0-preview1-26216-04 +======= + 2.1.0-preview3-26322-06 +>>>>>>> master + 2.0.0-preview2-25310-02 + + + 2.1.0-preview1-26218-04 + + + + + Microsoft.DotNet.Build.Tasks.Feed +<<<<<<< HEAD + 2.1.0-preview1-02609-02 +======= + 2.1.0-preview3-02622-01 +>>>>>>> master + + + + + build-info/dotnet/ + release/2.1.0 + release/2.1 + $(MSBuildThisFileFullPath) + + + + + $(BaseDotNetBuildInfo)wcf/$(DependencyBranch) + $(WCFCurrentRef) + + + $(BaseDotNetBuildInfo)corefx/$(CoreDependencyBranch) + $(CoreFxCurrentRef) + + Microsoft.Private.PackageBaseline;NETStandard.Library + + + $(BaseDotNetBuildInfo)standard/release/2.0.0 + $(StandardCurrentRef) + + + + $(BaseDotNetBuildInfo)buildtools/$(CoreDependencyBranch) + $(BuildToolsCurrentRef) + + + $(BaseDotNetBuildInfo)coreclr/$(CoreDependencyBranch) + $(CoreClrCurrentRef) + + + + https://raw.githubusercontent.com/dotnet/versions + + + + $(MSBuildThisFileFullPath) + WCFExpectedPrerelease + WCF + + + $(MSBuildThisFileFullPath) + CoreFxExpectedPrerelease + CoreFx + + + $(MSBuildThisFileFullPath) + MicrosoftPrivateCoreFxNETCoreAppPackageVersion + Microsoft.Private.CoreFx.NETCoreApp + + + + $(MSBuildThisFileFullPath) + NETStandardPackageVersion + $(NETStandardPackageId) + + + + File + $(MSBuildThisFileDirectory)BuildToolsVersion.txt + Microsoft.DotNet.BuildTools + + + $(MSBuildThisFileFullPath) + XunitNetcoreExtensionsVersion + Microsoft.xunit.netcore.extensions + + + $(MSBuildThisFileFullPath) + FeedTasksPackageVersion + $(FeedTasksPackage) + + + $(MSBuildThisFileFullPath) + CoreClrPackageVersion + Microsoft.NETCore.Runtime.CoreCLR + + + + + 2.3.0-beta1-build3642 + + + + + + + + + + + + 1.0.1 + + + + 1.0.3 + + + + + + + $(XUnitPackageVersion) + + + + $(XunitNetcoreExtensionsVersion) + + + + %(Identity) + true + + + + microsoft.xunit.runner.uwp + $(AppXRunnerVersion) + + + + diff --git a/dir.props b/dir.props index 669e9d22d0a..121bb42ec93 100644 --- a/dir.props +++ b/dir.props @@ -11,7 +11,7 @@ - 10.0.15138 + 10.0.16300 UAP,Version=v$(UAPvNextVersion) uap$(UAPvNextVersion) diff --git a/external/runtime/runtime.depproj b/external/runtime/runtime.depproj index 41322394832..6347a33f887 100644 --- a/external/runtime/runtime.depproj +++ b/external/runtime/runtime.depproj @@ -8,6 +8,7 @@ win10-$(ArchGroup) win10-$(ArchGroup)-aot true + $(NoWarn);NU1603;NU1605 diff --git a/external/test-runtime/XUnit.Runtime.depproj b/external/test-runtime/XUnit.Runtime.depproj index e1ee4e5f08b..0343e384e94 100644 --- a/external/test-runtime/XUnit.Runtime.depproj +++ b/external/test-runtime/XUnit.Runtime.depproj @@ -13,6 +13,7 @@ netstandard2.0 .NETStandard,Version=v2.0 netstandard2.0 + $(NoWarn);NU1603 diff --git a/init-tools.cmd b/init-tools.cmd index 878bcd68f62..eb03cfbf81b 100644 --- a/init-tools.cmd +++ b/init-tools.cmd @@ -33,7 +33,7 @@ if exist "%DOTNET_CMD%" goto :afterdotnetrestore echo Installing dotnet cli... if NOT exist "%DOTNET_PATH%" mkdir "%DOTNET_PATH%" -set DOTNET_ZIP_NAME=dotnet-dev-win-x64.%DOTNET_VERSION%.zip +set DOTNET_ZIP_NAME=dotnet-sdk-%DOTNET_VERSION%-win-x64.zip set DOTNET_REMOTE_PATH=https://dotnetcli.azureedge.net/dotnet/Sdk/%DOTNET_VERSION%/%DOTNET_ZIP_NAME% set DOTNET_LOCAL_PATH=%DOTNET_PATH%%DOTNET_ZIP_NAME% echo Installing '%DOTNET_REMOTE_PATH%' to '%DOTNET_LOCAL_PATH%' >> "%INIT_TOOLS_LOG%" @@ -68,4 +68,4 @@ if not [%INIT_TOOLS_ERRORLEVEL%]==[0] ( :: Create sempahore file echo Done initializing tools. echo Init-Tools.cmd completed for BuildTools Version: %BUILDTOOLS_VERSION% > "%BUILD_TOOLS_SEMAPHORE%" -exit /b 0 \ No newline at end of file +exit /b 0 diff --git a/init-tools.sh b/init-tools.sh index 3b8527822a8..65357952c39 100755 --- a/init-tools.sh +++ b/init-tools.sh @@ -23,7 +23,7 @@ OSName=$(uname -s) case $OSName in Darwin) OS=OSX - __DOTNET_PKG=dotnet-dev-osx-x64 + __DOTNET_PKG=dotnet-sdk-${__DOTNET_TOOLS_VERSION}-osx-x64 ulimit -n 2048 # Format x.y.z as single integer with three digits for each part VERSION=`sw_vers -productVersion| sed -e 's/\./ /g' | xargs printf "%03d%03d%03d"` @@ -34,14 +34,14 @@ OSName=$(uname -s) ;; Linux) - __DOTNET_PKG=dotnet-dev-linux-x64 + __DOTNET_PKG=dotnet-sdk-${__DOTNET_TOOLS_VERSION}-linux-x64 OS=Linux ;; *) echo "Unsupported OS '$OSName' detected. Downloading linux-x64 tools." OS=Linux - __DOTNET_PKG=dotnet-dev-linux-x64 + __DOTNET_PKG=dotnet-sdk-${__DOTNET_TOOLS_VERSION}-linux-x64 ;; esac fi @@ -64,7 +64,7 @@ if [ ! -e $__INIT_TOOLS_DONE_MARKER ]; then cp -r $DOTNET_TOOL_DIR/* $__DOTNET_PATH else echo "Installing dotnet cli..." - __DOTNET_LOCATION="https://dotnetcli.azureedge.net/dotnet/Sdk/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.${__DOTNET_TOOLS_VERSION}.tar.gz" + __DOTNET_LOCATION="https://dotnetcli.azureedge.net/dotnet/Sdk/${__DOTNET_TOOLS_VERSION}/${__DOTNET_PKG}.tar.gz" # curl has HTTPS CA trust-issues less often than wget, so lets try that first. echo "Installing '${__DOTNET_LOCATION}' to '$__DOTNET_PATH/dotnet.tar'" >> $__init_tools_log which curl > /dev/null 2> /dev/null @@ -98,11 +98,11 @@ if [ ! -e $__INIT_TOOLS_DONE_MARKER ]; then fi echo "Initializing BuildTools..." - echo "Running: $__BUILD_TOOLS_PATH/init-tools.sh $__scriptpath $__DOTNET_CMD $__TOOLRUNTIME_DIR" >> $__init_tools_log + echo "Running: $__BUILD_TOOLS_PATH/init-tools.sh $__scriptpath $__DOTNET_CMD $__TOOLRUNTIME_DIR $__PACKAGES_DIR" >> $__init_tools_log # Executables restored with .NET Core 2.0 do not have executable permission flags. https://github.com/NuGet/Home/issues/4424 chmod +x $__BUILD_TOOLS_PATH/init-tools.sh - $__BUILD_TOOLS_PATH/init-tools.sh $__scriptpath $__DOTNET_CMD $__TOOLRUNTIME_DIR >> $__init_tools_log + $__BUILD_TOOLS_PATH/init-tools.sh $__scriptpath $__DOTNET_CMD $__TOOLRUNTIME_DIR $__PACKAGES_DIR >> $__init_tools_log if [ "$?" != "0" ]; then echo "ERROR: An error occured when trying to initialize the tools. Please check '$__init_tools_log' for more details."1>&2 exit 1 diff --git a/pkg/baseline/packageIndex.json b/pkg/baseline/packageIndex.json index fbe5a109e73..ec17e78d34c 100644 --- a/pkg/baseline/packageIndex.json +++ b/pkg/baseline/packageIndex.json @@ -36,7 +36,9 @@ "4.3.1" ], "BaselineVersion": "4.5.0", - "InboxOn": {}, + "InboxOn": { + "uap10.0.16299": "4.1.1.0" + }, "AssemblyVersionInPackageVersion": { "4.0.0.0": "4.0.0", "4.0.1.0": "4.0.1", @@ -55,7 +57,9 @@ "4.3.1" ], "BaselineVersion": "4.5.0", - "InboxOn": {}, + "InboxOn": { + "uap10.0.16299": "4.1.3.0" + }, "AssemblyVersionInPackageVersion": { "3.9.0.0": "3.9.0", "4.0.0.0": "4.0.0", @@ -74,7 +78,9 @@ "4.3.1" ], "BaselineVersion": "4.5.0", - "InboxOn": {}, + "InboxOn": { + "uap10.0.16299": "4.1.3.0" + }, "AssemblyVersionInPackageVersion": { "4.0.0.0": "4.0.0", "4.1.0.0": "4.1.0", @@ -92,7 +98,9 @@ "4.3.1" ], "BaselineVersion": "4.5.0", - "InboxOn": {}, + "InboxOn": { + "uap10.0.16299": "4.2.1.0" + }, "AssemblyVersionInPackageVersion": { "3.9.0.0": "3.9.0", "4.0.0.0": "4.0.0", @@ -111,7 +119,9 @@ "4.3.1" ], "BaselineVersion": "4.5.0", - "InboxOn": {}, + "InboxOn": { + "uap10.0.16299": "4.0.4.0" + }, "AssemblyVersionInPackageVersion": { "3.9.0.0": "3.9.0", "4.0.0.0": "4.0.0", diff --git a/pkg/descriptions.json b/pkg/descriptions.json index 77efb5fb265..3ab4e5519a9 100644 --- a/pkg/descriptions.json +++ b/pkg/descriptions.json @@ -71,5 +71,10 @@ "System.ServiceModel.UpnEndpointIdentity", "System.ServiceModel.SpnEndpointIdentity" ] + }, + { + "Name": "svcutilcore", + "Description": "Generate XML serializers for types used by Service Contracts in an assembly", + "CommonTypes": [] } ] diff --git a/release-notes/System.ServiceModel.Duplex.md b/release-notes/System.ServiceModel.Duplex.md index b95e05d1347..2c92ab90208 100644 --- a/release-notes/System.ServiceModel.Duplex.md +++ b/release-notes/System.ServiceModel.Duplex.md @@ -8,6 +8,17 @@ ## Version History +### 4.5.0-preview1-26228-01 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Duplex/4.5.0-preview1-26228-01) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.1.0-preview1) + +### 4.4.1 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Duplex/4.4.1) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.0.5) +* [Supported features](https://github.com/dotnet/wcf/blob/master/release-notes/SupportedFeatures-v2.0.0.md) + ### 4.4.0 * [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Duplex/4.4.0) diff --git a/release-notes/System.ServiceModel.Http.md b/release-notes/System.ServiceModel.Http.md index 6bf3d5869ff..0e0295468c6 100644 --- a/release-notes/System.ServiceModel.Http.md +++ b/release-notes/System.ServiceModel.Http.md @@ -8,6 +8,17 @@ ## Version History +### 4.5.0-preview1-26228-01 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Http/4.5.0-preview1-26228-01) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.1.0-preview1) + +### 4.4.1 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Http/4.4.1) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.0.5) +* [Supported features](https://github.com/dotnet/wcf/blob/master/release-notes/SupportedFeatures-v2.0.0.md) + ### 4.4.0 * [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Http/4.4.0) diff --git a/release-notes/System.ServiceModel.NetTcp.md b/release-notes/System.ServiceModel.NetTcp.md index 5173ce0e954..e2d5d440978 100644 --- a/release-notes/System.ServiceModel.NetTcp.md +++ b/release-notes/System.ServiceModel.NetTcp.md @@ -8,7 +8,18 @@ ## Version History -### 4.4.0 +### 4.5.0-preview1-26228-01 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.NetTcp/4.5.0-preview1-26228-01) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.1.0-preview1) + +### 4.4.1 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.NetTcp/4.4.1) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.0.5) +* [Supported features](https://github.com/dotnet/wcf/blob/master/release-notes/SupportedFeatures-v2.0.0.md) + +### 4.4.0### 4.4.0 * [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.NetTcp/4.4.0) * [Release tag](https://github.com/dotnet/wcf/tree/v2.0.0) diff --git a/release-notes/System.ServiceModel.Primitives.md b/release-notes/System.ServiceModel.Primitives.md index 6efd0fedba1..0fd2a7eb3d9 100644 --- a/release-notes/System.ServiceModel.Primitives.md +++ b/release-notes/System.ServiceModel.Primitives.md @@ -8,7 +8,18 @@ ## Version History -### 4.4.0 +### 4.5.0-preview1-26228-01 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Primitives/4.5.0-preview1-26228-01) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.1.0-preview1) + +### 4.4.1 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Primitives/4.4.1) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.0.5) +* [Supported features](https://github.com/dotnet/wcf/blob/master/release-notes/SupportedFeatures-v2.0.0.md) + +### 4.4.0### 4.4.0 * [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Primitives/4.4.0) * [Release tag](https://github.com/dotnet/wcf/tree/v2.0.0) diff --git a/release-notes/System.ServiceModel.Security.md b/release-notes/System.ServiceModel.Security.md index 15261e6f57f..08be2bf9ceb 100644 --- a/release-notes/System.ServiceModel.Security.md +++ b/release-notes/System.ServiceModel.Security.md @@ -8,7 +8,18 @@ ## Version History -### 4.4.0 +### 4.5.0-preview1-26228-01 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Security/4.5.0-preview1-26228-01) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.1.0-preview1) + +### 4.4.1 + +* [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Security/4.4.1) +* [Release tag](https://github.com/dotnet/wcf/releases/tag/v2.0.5) +* [Supported features](https://github.com/dotnet/wcf/blob/master/release-notes/SupportedFeatures-v2.0.0.md) + +### 4.4.0### 4.4.0 * [NuGet Package](https://www.nuget.org/packages/System.ServiceModel.Security/4.4.0) * [Release tag](https://github.com/dotnet/wcf/tree/v2.0.0) diff --git a/release-notes/WCF-Web-Service-Reference-notes.md b/release-notes/WCF-Web-Service-Reference-notes.md index 94945f311c4..6b7166e0fde 100644 --- a/release-notes/WCF-Web-Service-Reference-notes.md +++ b/release-notes/WCF-Web-Service-Reference-notes.md @@ -1,9 +1,24 @@ -# WCF Web Service Reference Provider - Release Notes +# WCF Web Service Reference Provider - Release Notes -WCF Web Service Reference connected services provider is now part of Visual Studio 2017. Instructions can be found in the [usage guide](/Documentation/WCF-Web-Service-Reference-guide.md) document. Please [let us know](https://github.com/dotnet/wcf/issues/new) if you run into any issues or have any feedback. +WCF Web Service Reference connected services provider is now part of Visual Studio 2017. Instructions can be found in the [usage guide](https://go.microsoft.com/fwlink/?linkid=858814) document. Please [let us know](https://github.com/dotnet/wcf/issues/new) if you run into any issues or have any feedback. ## Release History +### 3/21/2018 - Visual Studio 2017 v15.7 Preview 2.0 [27520.0.d15.7] +* Improved support for future framework versions and bug fixes ([#2510](https://github.com/dotnet/wcf/issues/2510), [#2569](https://github.com/dotnet/wcf/issues/2569)) + +### 3/13/2018 - Visual Studio 2017 v15.7 Preview 1.0 [27512.0.d15.7] +* UI improvements and bug fixes ([#2104](https://github.com/dotnet/wcf/issues/2104)) + +### 2/7/2018 - Visual Studio 2017 v15.6 Preview 4.0 [27406.0.d15.6] +* Improved metadata processing. +* Bug fixes ([#2269](https://github.com/dotnet/wcf/issues/2269), [#2465](https://github.com/dotnet/wcf/issues/2465)) + +### 1/25/2018 - Visual Studio 2017 v15.6 Preview 3.0 [27323.2.d15.6] +* Building the user’s project is no longer required as part of the client code generation process ([#2384](https://github.com/dotnet/wcf/issues/2384)). +* Bug fixes ([#2461](https://github.com/dotnet/wcf/issues/2461), [#2197](https://github.com/dotnet/wcf/issues/2197), [#2410](https://github.com/dotnet/wcf/issues/2410)) + + ### 12/7/2017 - Visual Studio 2017 v15.6 Preview 1.0 [27205.0.d15.6] * Added support of updating an existing service reference. This simplifies the process for regenerating the WCF client proxy code for an updated web service (read [preview 1 blog post](https://blogs.msdn.microsoft.com/visualstudio/2017/12/07/visual-studio-2017-version-15-6-preview/) for more details). diff --git a/src/GenerateDepsJson.targets b/src/GenerateDepsJson.targets index 04c67e526db..a58d7678efc 100644 --- a/src/GenerateDepsJson.targets +++ b/src/GenerateDepsJson.targets @@ -19,8 +19,9 @@ - \ No newline at end of file + diff --git a/src/System.Private.ServiceModel/src/System.Private.ServiceModel.csproj b/src/System.Private.ServiceModel/src/System.Private.ServiceModel.csproj index 50a4b14da8d..4acfcad2be4 100644 --- a/src/System.Private.ServiceModel/src/System.Private.ServiceModel.csproj +++ b/src/System.Private.ServiceModel/src/System.Private.ServiceModel.csproj @@ -29,129 +29,60 @@ $(DefineConstants);TARGETS_WINDOWS - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/System.Private.ServiceModel/src/System/ServiceModel/BasicHttpSecurity.cs b/src/System.Private.ServiceModel/src/System/ServiceModel/BasicHttpSecurity.cs index d4256a51efc..cf6edeb0b89 100644 --- a/src/System.Private.ServiceModel/src/System/ServiceModel/BasicHttpSecurity.cs +++ b/src/System.Private.ServiceModel/src/System/ServiceModel/BasicHttpSecurity.cs @@ -31,9 +31,15 @@ public BasicHttpSecurityMode Mode get { return _mode; } set { + if (value == BasicHttpSecurityMode.Message || + value == BasicHttpSecurityMode.TransportWithMessageCredential) + { + throw ExceptionHelper.PlatformNotSupported(SR.Format(SR.UnsupportedSecuritySetting, nameof(value), value)); + } + if (!BasicHttpSecurityModeHelper.IsDefined(value)) { - throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("value")); + throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(value))); } _mode = value; } diff --git a/src/System.Private.ServiceModel/src/System/ServiceModel/Channels/HttpChannelFactory.cs b/src/System.Private.ServiceModel/src/System/ServiceModel/Channels/HttpChannelFactory.cs index 37232364bd5..ef86b1ccd26 100644 --- a/src/System.Private.ServiceModel/src/System/ServiceModel/Channels/HttpChannelFactory.cs +++ b/src/System.Private.ServiceModel/src/System/ServiceModel/Channels/HttpChannelFactory.cs @@ -46,6 +46,7 @@ internal class HttpChannelFactory private SecurityTokenManager _securityTokenManager; private TransferMode _transferMode; private ISecurityCapabilities _securityCapabilities; + private Func _httpMessageHandlerFactory; private WebSocketTransportSettings _webSocketSettings; private Lazy _webSocketSoapContentType; private SHA512 _hashAlgorithm; @@ -130,6 +131,7 @@ internal HttpChannelFactory(HttpTransportBindingElement bindingElement, BindingC _channelCredentials = context.BindingParameters.Find(); _securityCapabilities = bindingElement.GetProperty(context); + _httpMessageHandlerFactory = context.BindingParameters.Find>(); _webSocketSettings = WebSocketHelper.GetRuntimeWebSocketSettings(bindingElement.WebSocketSettings); _clientWebSocketFactory = ClientWebSocketFactory.GetFactory(); @@ -331,7 +333,13 @@ internal async Task GetHttpClientAsync(EndpointAddress to, clientHandler.Credentials = credential; } - httpClient = new HttpClient(clientHandler); + HttpMessageHandler handler = clientHandler; + if(_httpMessageHandlerFactory!= null) + { + handler = _httpMessageHandlerFactory(clientHandler); + } + + httpClient = new HttpClient(handler); if(!_keepAliveEnabled) httpClient.DefaultRequestHeaders.ConnectionClose = true; diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Binding/Http/BasicHttpBindingTests.4.0.0.cs b/src/System.Private.ServiceModel/tests/Scenarios/Binding/Http/BasicHttpBindingTests.4.0.0.cs index 7f8fbd079fd..b576e1291b9 100644 --- a/src/System.Private.ServiceModel/tests/Scenarios/Binding/Http/BasicHttpBindingTests.4.0.0.cs +++ b/src/System.Private.ServiceModel/tests/Scenarios/Binding/Http/BasicHttpBindingTests.4.0.0.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using System.Net.Http; using System.ServiceModel; using System.ServiceModel.Channels; using Infrastructure.Common; @@ -45,6 +46,7 @@ public static void DefaultSettings_Echo_RoundTrips_String() [WcfFact] [OuterLoop] + [Issue(2624, OS = OSID.OSX_10_13 | OSID.Debian_9 | OSID.AnyFedora)] public static void HttpKeepAliveDisabled_Echo_RoundTrips_True() { ChannelFactory factory = null; @@ -79,4 +81,100 @@ public static void HttpKeepAliveDisabled_Echo_RoundTrips_True() ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); } } + + [WcfFact] + [OuterLoop] + public static void HttpMessageHandlerFactory_Success() + { + ChannelFactory factory = null; + IWcfService serviceProxy = null; + string testString = "Hello"; + Binding binding = null; + + try + { + // *** SETUP *** \\ + binding = new BasicHttpBinding(BasicHttpSecurityMode.None); + factory = new ChannelFactory(binding, new EndpointAddress(Endpoints.HttpBaseAddress_Basic)); + var handlerFactoryBehavior = new HttpMessageHandlerBehavior(); + bool handlerCalled = false; + handlerFactoryBehavior.OnSending = (message, token) => + { + handlerCalled = true; + return null; + }; + factory.Endpoint.Behaviors.Add(handlerFactoryBehavior); + serviceProxy = factory.CreateChannel(); + + // *** EXECUTE *** \\ + string result = serviceProxy.Echo("Hello"); + + // *** VALIDATE *** \\ + Assert.True(handlerCalled, "Error: expected client to call intercepting handler"); + Assert.True(result == testString, String.Format("Error: expected response from service: '{0}' Actual was: '{1}'", testString, result)); + + // *** CLEANUP *** \\ + factory.Close(); + ((ICommunicationObject)serviceProxy).Close(); + } + finally + { + // *** ENSURE CLEANUP *** \\ + ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); + } + } + + [WcfFact] + [OuterLoop] + public static void HttpMessageHandlerFactory_ModifyContent_Success() + { + ChannelFactory factory = null; + IWcfService serviceProxy = null; + string testString = "Hello"; + string substituteString = "World"; + Binding binding = null; + + try + { + // *** SETUP *** \\ + binding = new BasicHttpBinding(BasicHttpSecurityMode.None); + factory = new ChannelFactory(binding, new EndpointAddress(Endpoints.HttpBaseAddress_Basic)); + var handlerFactoryBehavior = new HttpMessageHandlerBehavior(); + handlerFactoryBehavior.OnSending = (message, token) => + { + var oldContent = message.Content; + string requestMessageBody = oldContent.ReadAsStringAsync().Result; + requestMessageBody = requestMessageBody.Replace(testString, substituteString); + message.Content = new StringContent(requestMessageBody); + foreach (var header in oldContent.Headers) + { + if (!header.Key.Equals("Content-Length") && message.Content.Headers.Contains(header.Key)) + { + message.Content.Headers.Remove(header.Key); + } + + message.Content.Headers.Add(header.Key, header.Value); + } + + return null; + }; + factory.Endpoint.Behaviors.Add(handlerFactoryBehavior); + serviceProxy = factory.CreateChannel(); + + // *** EXECUTE *** \\ + string result = serviceProxy.Echo("Hello"); + + // *** VALIDATE *** \\ + Assert.True(result == substituteString, String.Format("Error: expected response from service: '{0}' Actual was: '{1}'", testString, result)); + + // *** CLEANUP *** \\ + factory.Close(); + ((ICommunicationObject)serviceProxy).Close(); + } + finally + { + // *** ENSURE CLEANUP *** \\ + ScenarioTestHelpers.CloseCommunicationObjects((ICommunicationObject)serviceProxy, factory); + } + } } diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Binding/Http/HttpBindingTestHelpers.cs b/src/System.Private.ServiceModel/tests/Scenarios/Binding/Http/HttpBindingTestHelpers.cs new file mode 100644 index 00000000000..35f8edcd57a --- /dev/null +++ b/src/System.Private.ServiceModel/tests/Scenarios/Binding/Http/HttpBindingTestHelpers.cs @@ -0,0 +1,64 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.ServiceModel.Channels; +using System.ServiceModel.Description; +using System.ServiceModel.Dispatcher; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +public class HttpMessageHandlerBehavior : IEndpointBehavior +{ + public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters) + { + bindingParameters.Add(new Func(GetHttpMessageHandler)); + } + + public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime) { } + + public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher) { } + + public void Validate(ServiceEndpoint endpoint) { } + + public HttpMessageHandler GetHttpMessageHandler(HttpClientHandler httpClientHandler) + { + return new InterceptingHttpMessageHandler(httpClientHandler, this); + } + + public Func OnSending { get; set; } + public Func OnSent { get; set; } + +} + +public class InterceptingHttpMessageHandler : DelegatingHandler +{ + private readonly HttpMessageHandlerBehavior _parent; + + public InterceptingHttpMessageHandler(HttpMessageHandler innerHandler, HttpMessageHandlerBehavior parent) + { + InnerHandler = innerHandler; + _parent = parent; + } + + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + HttpResponseMessage response; + if (_parent.OnSending != null) + { + response = _parent.OnSending(request, cancellationToken); + if (response != null) + return response; + } + + response = await base.SendAsync(request, cancellationToken); + + if (_parent.OnSent != null) + { + return _parent.OnSent(response, cancellationToken); + } + + return response; + } +} diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Client/ExpectedExceptions/ExpectedExceptionTests.4.1.0.cs b/src/System.Private.ServiceModel/tests/Scenarios/Client/ExpectedExceptions/ExpectedExceptionTests.4.1.0.cs index 56374fa0e26..62dd3193fc1 100644 --- a/src/System.Private.ServiceModel/tests/Scenarios/Client/ExpectedExceptions/ExpectedExceptionTests.4.1.0.cs +++ b/src/System.Private.ServiceModel/tests/Scenarios/Client/ExpectedExceptions/ExpectedExceptionTests.4.1.0.cs @@ -53,6 +53,7 @@ public static void NotExistentHost_Throws_EndpointNotFoundException() [WcfFact] [Issue(1717, Framework = FrameworkID.NetNative)] + [Issue(2626, OS = OSID.OSX_10_13)] [OuterLoop] public static void ServiceRestart_Throws_CommunicationException() { diff --git a/src/System.Private.ServiceModel/tests/Scenarios/Security/TransportSecurity/Tcp/ClientCredentialTypeTests.4.1.0.cs b/src/System.Private.ServiceModel/tests/Scenarios/Security/TransportSecurity/Tcp/ClientCredentialTypeTests.4.1.0.cs index 5ebe4e2da9e..a38f738dbbb 100644 --- a/src/System.Private.ServiceModel/tests/Scenarios/Security/TransportSecurity/Tcp/ClientCredentialTypeTests.4.1.0.cs +++ b/src/System.Private.ServiceModel/tests/Scenarios/Security/TransportSecurity/Tcp/ClientCredentialTypeTests.4.1.0.cs @@ -13,7 +13,6 @@ public partial class Tcp_ClientCredentialTypeTests : ConditionalWcfTest { [WcfFact] - [Issue(1886, OS = OSID.AnyOSX)] [Condition(nameof(Root_Certificate_Installed), nameof(Client_Certificate_Installed))] [OuterLoop] public static void TcpClientCredentialType_Certificate_EchoString() @@ -62,7 +61,6 @@ public static void TcpClientCredentialType_Certificate_EchoString() } [WcfFact] - [Issue(1886, OS = OSID.AnyOSX)] [Condition(nameof(Root_Certificate_Installed), nameof(Client_Certificate_Installed))] [OuterLoop] public static void TcpClientCredentialType_Certificate_CustomValidator_EchoString() diff --git a/src/System.ServiceModel.Http/pkg/System.ServiceModel.Http.pkgproj b/src/System.ServiceModel.Http/pkg/System.ServiceModel.Http.pkgproj index f57ae4af52f..697306a4904 100644 --- a/src/System.ServiceModel.Http/pkg/System.ServiceModel.Http.pkgproj +++ b/src/System.ServiceModel.Http/pkg/System.ServiceModel.Http.pkgproj @@ -27,6 +27,11 @@ .NETStandard,Version=v1.0;.NETStandard,Version=v1.1;.NETStandard,Version=v1.2 + + + UAP + \ No newline at end of file diff --git a/src/System.ServiceModel.Http/ref/System.ServiceModel.Http.cs b/src/System.ServiceModel.Http/ref/System.ServiceModel.Http.cs index d921a42be4e..83e9da2b71d 100644 --- a/src/System.ServiceModel.Http/ref/System.ServiceModel.Http.cs +++ b/src/System.ServiceModel.Http/ref/System.ServiceModel.Http.cs @@ -22,7 +22,7 @@ public enum BasicHttpMessageCredentialType } public sealed partial class BasicHttpSecurity { - internal BasicHttpSecurity() { } + public BasicHttpSecurity() { } public System.ServiceModel.BasicHttpSecurityMode Mode { get { return default(System.ServiceModel.BasicHttpSecurityMode); } set { } } public System.ServiceModel.HttpTransportSecurity Transport { get { return default(System.ServiceModel.HttpTransportSecurity); } set { } } } diff --git a/src/System.ServiceModel.Http/tests/ServiceModel/BasicHttpSecurityTest.cs b/src/System.ServiceModel.Http/tests/ServiceModel/BasicHttpSecurityTest.cs new file mode 100644 index 00000000000..d65163e7d56 --- /dev/null +++ b/src/System.ServiceModel.Http/tests/ServiceModel/BasicHttpSecurityTest.cs @@ -0,0 +1,25 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + + +using System; +using System.ServiceModel; +using System.ServiceModel.Channels; +using System.ServiceModel.Tests.Common; +using System.Text; +using System.Xml; +using Infrastructure.Common; +using Xunit; + +public static class BasicHttpSecurityTest +{ + [WcfTheory] + [InlineData(BasicHttpSecurityMode.Message)] + [InlineData(BasicHttpSecurityMode.TransportWithMessageCredential)] + public static void BasicHttpSecurity_MessageSecurityMode_ThrowsPNSE(BasicHttpSecurityMode value) + { + var security = new BasicHttpSecurity(); + Assert.Throws(() => security.Mode = value); + } +} diff --git a/src/System.ServiceModel.NetTcp/pkg/System.ServiceModel.NetTcp.pkgproj b/src/System.ServiceModel.NetTcp/pkg/System.ServiceModel.NetTcp.pkgproj index 582164d943c..2d3d5ecb395 100644 --- a/src/System.ServiceModel.NetTcp/pkg/System.ServiceModel.NetTcp.pkgproj +++ b/src/System.ServiceModel.NetTcp/pkg/System.ServiceModel.NetTcp.pkgproj @@ -26,6 +26,11 @@ .NETStandard,Version=v1.1;.NETStandard,Version=v1.2 + + + UAP + \ No newline at end of file diff --git a/src/System.ServiceModel.Primitives/ref/System.ServiceModel.Primitives.cs b/src/System.ServiceModel.Primitives/ref/System.ServiceModel.Primitives.cs index b2f7dd629ba..ce4b1869e24 100644 --- a/src/System.ServiceModel.Primitives/ref/System.ServiceModel.Primitives.cs +++ b/src/System.ServiceModel.Primitives/ref/System.ServiceModel.Primitives.cs @@ -107,6 +107,13 @@ protected ChannelFactory(System.Type channelType) { } public virtual TChannel CreateChannel(System.ServiceModel.EndpointAddress address, System.Uri via) { return default(TChannel); } protected override System.ServiceModel.Description.ServiceEndpoint CreateDescription() { return default(System.ServiceModel.Description.ServiceEndpoint); } } + public partial class ChannelTerminatedException : System.ServiceModel.CommunicationException + { + public ChannelTerminatedException() { } + public ChannelTerminatedException(string message) { } + public ChannelTerminatedException(string message, System.Exception innerException) { } + protected ChannelTerminatedException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context) { } + } public abstract partial class ClientBase : System.IDisposable, System.ServiceModel.ICommunicationObject where TChannel : class { protected ClientBase() { } @@ -126,6 +133,7 @@ event System.EventHandler System.ServiceModel.ICommunicationObject.Faulted { add event System.EventHandler System.ServiceModel.ICommunicationObject.Opened { add { } remove { } } event System.EventHandler System.ServiceModel.ICommunicationObject.Opening { add { } remove { } } public void Abort() { } + public void Close() { } protected virtual TChannel CreateChannel() { return default(TChannel); } protected T GetDefaultValueForInitialization() { return default(T); } protected void InvokeAsync(System.ServiceModel.ClientBase.BeginOperationDelegate beginOperationDelegate, object[] inValues, System.ServiceModel.ClientBase.EndOperationDelegate endOperationDelegate, System.Threading.SendOrPostCallback operationCompletedCallback, object userState) { } diff --git a/src/System.ServiceModel.Primitives/tests/ServiceModel/ClientBaseTest.cs b/src/System.ServiceModel.Primitives/tests/ServiceModel/ClientBaseTest.cs new file mode 100644 index 00000000000..bbf31d38d16 --- /dev/null +++ b/src/System.ServiceModel.Primitives/tests/ServiceModel/ClientBaseTest.cs @@ -0,0 +1,51 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + + +using System; +using System.Collections.Generic; +using System.ServiceModel; +using System.ServiceModel.Description; +using System.ServiceModel.Channels; +using System.Text; +using Infrastructure.Common; +using Xunit; + +public static class ClientBaseTest +{ + [WcfTheory] + public static void ClientBaseCloseMethodClosesCorrectly() + { + // *** SETUP *** \\ + BasicHttpBinding binding = new BasicHttpBinding(); + MyClientBase client = new MyClientBase(binding, new EndpointAddress("http://myendpoint")); + + // *** VALIDATE *** \\ + Assert.Equal(CommunicationState.Created, client.State); + client.Open(); + Assert.Equal(CommunicationState.Opened, client.State); + client.Close(); + Assert.Equal(CommunicationState.Closed, client.State); + } + + public class MyClientBase : ClientBase + { + public MyClientBase(Binding binding, EndpointAddress endpointAddress) + : base(binding, endpointAddress) + { + } + + public ITestService Proxy + { + get { return base.Channel; } + } + } + + [ServiceContract] + public interface ITestService + { + [OperationContract] + string Echo(string message); + } +} diff --git a/src/svcutilcore/pkg/GenerateNupkgProps.targets b/src/svcutilcore/pkg/GenerateNupkgProps.targets new file mode 100644 index 00000000000..ce4649910de --- /dev/null +++ b/src/svcutilcore/pkg/GenerateNupkgProps.targets @@ -0,0 +1,32 @@ + + + + + GenerateNupkgProps; + $(BuildDependsOn) + + $(PackageOutputPath)build/ + $(PackageBuildPath)$(Id).props + + + + build\ + + + + + +<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <DotNetCliToolReference Include="$(Id)" Version="$(PackageVersion)" /> + </ItemGroup> +</Project> + + + + + + \ No newline at end of file diff --git a/src/svcutilcore/pkg/files/dotnet-svcutilcore.runtimeconfig.json b/src/svcutilcore/pkg/files/dotnet-svcutilcore.runtimeconfig.json new file mode 100644 index 00000000000..8988a36c08c --- /dev/null +++ b/src/svcutilcore/pkg/files/dotnet-svcutilcore.runtimeconfig.json @@ -0,0 +1,9 @@ +{ + "runtimeOptions": { + "tfm": "netcoreapp2.1", + "framework": { + "name": "Microsoft.NETCore.App", + "version": "2.0.0" + } + } +} diff --git a/src/svcutilcore/pkg/files/prefercliruntime b/src/svcutilcore/pkg/files/prefercliruntime new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/svcutilcore/pkg/files/svcutilcore.targets b/src/svcutilcore/pkg/files/svcutilcore.targets new file mode 100644 index 00000000000..25d123309d0 --- /dev/null +++ b/src/svcutilcore/pkg/files/svcutilcore.targets @@ -0,0 +1,28 @@ + + + $(IntermediateOutputPath) + <_SerializationAssemblyName>$(AssemblyName).XmlSerializers + <_SerializerDllIntermediateFolder>$(IntermediateOutputPath)$(_SerializationAssemblyName).dll + <_SerializerPdbIntermediateFolder>$(IntermediateOutputPath)$(_SerializationAssemblyName).pdb + <_SerializerCsIntermediateFolder>$(IntermediateOutputPath)$(_SerializationAssemblyName).cs + <_SvcUtilWarningText>Warning : Fail to generate the serializer for $(AssemblyName)$(TargetExt). + <_SerializationAssemblyDisabledWarnings>$(NoWarn);219;162;$(SerializationAssemblyDisabledWarnings) + + + + + + + + + + + + + + + + + + + diff --git a/src/svcutilcore/pkg/svcutilcore.pkgproj b/src/svcutilcore/pkg/svcutilcore.pkgproj new file mode 100644 index 00000000000..d28f031d667 --- /dev/null +++ b/src/svcutilcore/pkg/svcutilcore.pkgproj @@ -0,0 +1,29 @@ + + + + + + true + + + + net461;netcoreapp2.0;$(AllXamarinFrameworks) + + + + true + false + true + + + + + \lib\netstandard2.0\ + + + build\ + + + + + diff --git a/src/svcutilcore/tests/svcutilcore.Tests.csproj b/src/svcutilcore/tests/svcutilcore.Tests.csproj index 6481b4d1c78..bd4be1eab88 100644 --- a/src/svcutilcore/tests/svcutilcore.Tests.csproj +++ b/src/svcutilcore/tests/svcutilcore.Tests.csproj @@ -82,7 +82,7 @@ - - -