Upload source code for Microsoft.Data.SqlClient (#166)
This commit is contained in:
Родитель
9048729715
Коммит
2ddf3a36b0
|
@ -0,0 +1,63 @@
|
|||
###############################################################################
|
||||
# Set default behavior to automatically normalize line endings.
|
||||
###############################################################################
|
||||
* text=auto
|
||||
|
||||
###############################################################################
|
||||
# Set default behavior for command prompt diff.
|
||||
#
|
||||
# This is need for earlier builds of msysgit that does not have it on by
|
||||
# default for csharp files.
|
||||
# Note: This is only used by command line
|
||||
###############################################################################
|
||||
#*.cs diff=csharp
|
||||
|
||||
###############################################################################
|
||||
# Set the merge driver for project and solution files
|
||||
#
|
||||
# Merging from the command prompt will add diff markers to the files if there
|
||||
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||
# the diff markers are never inserted). Diff markers may cause the following
|
||||
# file extensions to fail to load in VS. An alternative would be to treat
|
||||
# these files as binary and thus will always conflict and require user
|
||||
# intervention with every merge. To do so, just uncomment the entries below
|
||||
###############################################################################
|
||||
#*.sln merge=binary
|
||||
#*.csproj merge=binary
|
||||
#*.vbproj merge=binary
|
||||
#*.vcxproj merge=binary
|
||||
#*.vcproj merge=binary
|
||||
#*.dbproj merge=binary
|
||||
#*.fsproj merge=binary
|
||||
#*.lsproj merge=binary
|
||||
#*.wixproj merge=binary
|
||||
#*.modelproj merge=binary
|
||||
#*.sqlproj merge=binary
|
||||
#*.wwaproj merge=binary
|
||||
|
||||
###############################################################################
|
||||
# behavior for image files
|
||||
#
|
||||
# image files are treated as binary by default.
|
||||
###############################################################################
|
||||
#*.jpg binary
|
||||
#*.png binary
|
||||
#*.gif binary
|
||||
|
||||
###############################################################################
|
||||
# diff behavior for common document formats
|
||||
#
|
||||
# Convert binary document formats to text before diffing them. This feature
|
||||
# is only available from the command line. Turn it on by uncommenting the
|
||||
# entries below.
|
||||
###############################################################################
|
||||
#*.doc diff=astextplain
|
||||
#*.DOC diff=astextplain
|
||||
#*.docx diff=astextplain
|
||||
#*.DOCX diff=astextplain
|
||||
#*.dot diff=astextplain
|
||||
#*.DOT diff=astextplain
|
||||
#*.pdf diff=astextplain
|
||||
#*.PDF diff=astextplain
|
||||
#*.rtf diff=astextplain
|
||||
#*.RTF diff=astextplain
|
|
@ -4,6 +4,7 @@
|
|||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.rsuser
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
|
@ -12,6 +13,9 @@
|
|||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Mono auto generated files
|
||||
mono_crash.*
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
|
@ -19,6 +23,8 @@
|
|||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
[Aa][Rr][Mm]/
|
||||
[Aa][Rr][Mm]64/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
|
@ -36,9 +42,10 @@ Generated\ Files/
|
|||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
# NUnit
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
nunit-*.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
|
@ -52,7 +59,6 @@ BenchmarkDotNet.Artifacts/
|
|||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
**/Properties/launchSettings.json
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
@ -60,7 +66,7 @@ StyleCopReport.xml
|
|||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*_h.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
|
@ -77,6 +83,7 @@ StyleCopReport.xml
|
|||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*_wpftmp.csproj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
|
@ -179,6 +186,8 @@ PublishScripts/
|
|||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# NuGet Symbol Packages
|
||||
*.snupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
|
@ -203,12 +212,14 @@ BundleArtifacts/
|
|||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
*.appxbundle
|
||||
*.appxupload
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
!?*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
|
@ -221,7 +232,7 @@ ClientBin/
|
|||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
|
@ -252,6 +263,9 @@ ServiceFabricBackup/
|
|||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
*- [Bb]ackup.rdl
|
||||
*- [Bb]ackup ([0-9]).rdl
|
||||
*- [Bb]ackup ([0-9][0-9]).rdl
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
@ -287,12 +301,8 @@ paket-files/
|
|||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
# CodeRush personal settings
|
||||
.cr/personal
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
|
@ -317,7 +327,7 @@ __pycache__/
|
|||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
|
@ -326,5 +336,17 @@ ASALocalRun/
|
|||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
# Local History for Visual Studio
|
||||
.localhistory/
|
||||
|
||||
# BeatPulse healthcheck temp database
|
||||
healthchecksdb
|
||||
|
||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017
|
||||
MigrationBackup/
|
||||
|
||||
# Ionide (cross platform F# VS Code tools) working folder
|
||||
.ionide/
|
||||
|
|
|
@ -0,0 +1,136 @@
|
|||
# Guidelines for Building Microsoft.Data.SqlClient
|
||||
|
||||
This document provides all the necessary details to build the driver and run tests present in the repository.
|
||||
|
||||
## Visual Studio Pre-Requisites
|
||||
|
||||
This project should be ideally built with Visual Studio 2017+ for the best compatibility. Use either of the two environments with their required set of compoenents as mentioned below:
|
||||
- **Visual Studio 2017** with imported components: [VS17Components](/tools/vsconfig/VS17Components.vsconfig)
|
||||
- **Visual Studio 2019** with imported components: [VS19Components](/tools/vsconfig/VS19Components.vsconfig)
|
||||
|
||||
Once the environment is setup properly, execute the desired set of commands below from the _root_ folder to perform the respective operations:
|
||||
|
||||
## Building the driver
|
||||
|
||||
```bash
|
||||
# Default Build Configuration:
|
||||
|
||||
> msbuild
|
||||
# Builds the driver for the Client OS in 'Debug' Configuration for 'AnyCPU' platform.
|
||||
# Both .Net Framework (NetFx) and .Net Core drivers are built by default (as supported by Client OS).
|
||||
```
|
||||
|
||||
```bash
|
||||
> msbuild /p:Configuration=Release
|
||||
# Builds the driver in 'Release' Configuration.
|
||||
```
|
||||
|
||||
```bash
|
||||
> msbuild /p:Platform=x86
|
||||
# Builds the .Net Framework (NetFx) driver for Win32 (x86) platform on Windows.
|
||||
```
|
||||
|
||||
```bash
|
||||
> msbuild /t:clean
|
||||
# Cleans all build directories.
|
||||
```
|
||||
|
||||
```bash
|
||||
> msbuild /t:restore
|
||||
# Restores Nuget Packages.
|
||||
```
|
||||
|
||||
```bash
|
||||
> msbuild /t:BuildAllConfigurations
|
||||
# Builds the driver for all target OSes and supported platforms.
|
||||
```
|
||||
|
||||
```bash
|
||||
> msbuild /p:BuildNetFx=false
|
||||
# Skips building the .Net Framework (NetFx) Driver on Windows.
|
||||
# On Unix the netfx driver build is automatically skipped.
|
||||
```
|
||||
|
||||
```bash
|
||||
> msbuild /p:OSGroup=Unix
|
||||
# Builds the driver for the Unix platform.
|
||||
```
|
||||
|
||||
```bash
|
||||
> msbuild /t:BuildAllOSes
|
||||
# Builds the driver for all Operating Systems.
|
||||
```
|
||||
|
||||
## Building Tests
|
||||
|
||||
```bash
|
||||
> msbuild /t:BuildTestsNetCore
|
||||
# Build tests for the .Net Core driver.
|
||||
```
|
||||
|
||||
```bash
|
||||
> msbuild /t:BuildTestsNetFx
|
||||
# Build tests for the .Net Framework (NetFx) driver.
|
||||
```
|
||||
|
||||
## Run Functional Tests
|
||||
|
||||
Windows (`netcoreapp2.1`):
|
||||
```bash
|
||||
> dotnet test "src\Microsoft.Data.SqlClient\tests\FunctionalTests\Microsoft.Data.SqlClient.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Release" /p:TestTargetOS="Windowsnetcoreapp" --no-build -v n --filter "category!=nonnetcoreapptests&category!=failing&category!=nonwindowstests"
|
||||
```
|
||||
|
||||
Windows (`net46 x86`):
|
||||
```bash
|
||||
> dotnet test "src\Microsoft.Data.SqlClient\tests\FunctionalTests\Microsoft.Data.SqlClient.Tests.csproj" /p:Platform="Win32" /p:Configuration="Release" /p:TestTargetOS="Windowsnetfx" --no-build -v n --filter "category!=nonnetfxtests&category!=failing&category!=nonwindowstests"
|
||||
```
|
||||
|
||||
Windows (`net46 x64`):
|
||||
```bash
|
||||
> dotnet test "src\Microsoft.Data.SqlClient\tests\FunctionalTests\Microsoft.Data.SqlClient.Tests.csproj" /p:Platform="x64" /p:Configuration="Release" /p:TestTargetOS="Windowsnetfx" --no-build -v n --filter "category!=nonnetfxtests&category!=failing&category!=nonwindowstests"
|
||||
```
|
||||
|
||||
Unix (`netcoreapp2.1`):
|
||||
```bash
|
||||
> dotnet test "src/Microsoft.Data.SqlClient/tests/FunctionalTests/Microsoft.Data.SqlClient.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Release" /p:TestTargetOS="Unixnetcoreapp" --no-build -v n --filter "category!=nonnetcoreapptests&category!=failing&category!=nonlinuxtests&category!=nonuaptests"
|
||||
```
|
||||
|
||||
## Run Manual Tests
|
||||
|
||||
### Pre-Requisites for running Manual tests:
|
||||
Manual Tests require the below setup to run:
|
||||
* SQL Server with enabled Shared Memory, TCP and Named Pipes Protocols and access to the Client OS.
|
||||
* Databases "NORTHWIND" and "UdtTestDb" present in SQL Server, created using SQL scripts [createNorthwindDb.sql](tools\testsql\createNorthwindDb.sql) and [createUdtTestDb.sql](tools\testsql\createUdtTestDb.sql).
|
||||
* Environment variables configured on the Client OS:
|
||||
|
||||
|Env Variable|Description|Value|
|
||||
|------|--------|-------------------|
|
||||
|TEST_NP_CONN_STR | Connection String for Named Pipes enabled SQL Server instance.| `Server=\\{servername}\pipe\sql\query;Database={Database_Name};Trusted_Connection=True;` <br/> OR <br/> `Data Source=np:{servername};Initial Catalog={Database_Name};Integrated Security=True;`|
|
||||
|TEST_TCP_CONN_STR | Connection String for TCP enabled SQL Server instance. | `Server={servername};Database={Database_Name};Trusted_Connection=True;` <br/> OR `Data Source={servername};Initial Catalog={Database_Name};Integrated Security=True;`|
|
||||
|AAD_PASSWORD_CONN_STR | (Optional) Connection String for testing Azure Active Directory Password Authentication. | `Data Source={server.database.windows.net}; Initial Catalog={Azure_DB_Name};Authentication=Active Directory Password; User ID={AAD_User}; Password={AAD_User_Password};`|
|
||||
|TEST_ACCESSTOKEN_SETUP| (Optional) Contains the Access Token to be used for tests.| _<OAuth 2.0 Access Token>_ |
|
||||
|TEST_LOCALDB_INSTALLED| (Optional) Whether or not a LocalDb instance of SQL Server is installed on the machine running the tests. |`1` OR `0`|
|
||||
|TEST_INTEGRATEDSECURITY_SETUP| (Optional) Whether or not the USER running tests has integrated security access to the target SQL Server.| `1` OR `0`|
|
||||
|TEST_FILESTREAM_SETUP| (Optional) Whether or not FileStream is enabled on SQL Server| `1` OR `0`|
|
||||
|
||||
Commands to run tests:
|
||||
|
||||
Windows (`netcoreapp2.1`):
|
||||
```bash
|
||||
> dotnet test "src\Microsoft.Data.SqlClient\tests\ManualTests\Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Release" /p:TestTargetOS="Windowsnetcoreapp" --no-build -v n --filter "category!=nonnetcoreapptests&category!=failing&category!=nonwindowstests"
|
||||
```
|
||||
|
||||
Windows (`net46 x86`):
|
||||
```bash
|
||||
> dotnet test "src\Microsoft.Data.SqlClient\tests\ManualTests\Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="Win32" /p:Configuration="Release" /p:TestTargetOS="Windowsnetfx" --no-build -v n --filter "category!=nonnetfxtests&category!=failing&category!=nonwindowstests"
|
||||
```
|
||||
|
||||
Windows (`net46 x64`):
|
||||
```bash
|
||||
> dotnet test "src\Microsoft.Data.SqlClient\tests\ManualTests\Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="x64" /p:Configuration="Release" /p:TestTargetOS="Windowsnetfx" --no-build -v n --filter "category!=nonnetfxtests&category!=failing&category!=nonwindowstests"
|
||||
```
|
||||
|
||||
Unix (`netcoreapp2.1`):
|
||||
```bash
|
||||
> dotnet test "src/Microsoft.Data.SqlClient/tests/ManualTests/Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" /p:Platform="AnyCPU" /p:Configuration="Release" /p:TestTargetOS="Unixnetcoreapp" --no-build -v n --filter "category!=nonnetcoreapptests&category!=failing&category!=nonlinuxtests&category!=nonuaptests"
|
||||
```
|
|
@ -0,0 +1,8 @@
|
|||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
||||
|
||||
## [Stable Release 1.0.19239.1] - 2019-08-27
|
||||
|
||||
Initial release. Release Notes uploaded in [1.0.md](release-notes\1.0\1.0.md)
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"Projects": [
|
||||
{
|
||||
"LanguageSet": "AzureKatal_Languages",
|
||||
"LocItems": [
|
||||
{
|
||||
"SourceFile": "src\\Microsoft.Data.SqlClient\\netfx\\src\\Resources\\Strings.resx",
|
||||
"CopyOption": "LangIDOnName",
|
||||
"OutputPath": "src\\Microsoft.Data.SqlClient\\netfx\\src\\Resources"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
63
README.md
63
README.md
|
@ -1,27 +1,76 @@
|
|||
[![GitHub license](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square)](https://raw.githubusercontent.com/dotnet/sqlclient/master/LICENSE)
|
||||
[![Nuget](https://img.shields.io/nuget/dt/Microsoft.Data.SqlClient?label=Nuget.org%20Downloads&style=flat-square&color=blue)](https://www.nuget.org/packages/Microsoft.Data.SqlClient)
|
||||
[![Gitter](https://img.shields.io/gitter/room/badges/shields.svg?style=flat-square&color=blue)](https://gitter.im/Microsoft/mssql-developers)
|
||||
|
||||
# Microsoft SqlClient Data Provider for SQL Server
|
||||
|
||||
Microsoft.Data.SqlClient is a data provider for Microsoft Sql Server. Currently in preview, it is a union of the two System.Data.SqlClient components which live independently in .NET Framework and .NET Core. Going forward, support for new SQL Server features will be implemented in Microsoft.Data.SqlClient.
|
||||
Welcome to the home of Microsoft ADO.NET driver for SQL Server aka Microsoft.Data.SqlClient GitHub repository.
|
||||
|
||||
The Microsoft.Data.SqlClient package supports .NET Framework 4.6+, .NET Core 2.1+, and .NET Standard 2.0+.
|
||||
Microsoft.Data.SqlClient is a data provider for Microsoft Sql Server. Now in General Availability, it is a union of the two System.Data.SqlClient components which live independently in .NET Framework and .NET Core. Going forward, support for new SQL Server features will be implemented in Microsoft.Data.SqlClient.
|
||||
|
||||
The current preview of this library has been released under a proprietary, closed source license. When the code is migrated to this repository, future releases from that code will be released under the MIT license.
|
||||
## Supportability
|
||||
The Microsoft.Data.SqlClient package supports below environments:
|
||||
- .NET Framework 4.6+
|
||||
- .NET Core 2.1+
|
||||
- .NET Standard 2.0+.
|
||||
|
||||
The source code of this library is now available under MIT license.
|
||||
|
||||
## Download
|
||||
|
||||
The Microsoft.Data.SqlClient package is available on [NuGet.org](https://www.nuget.org/packages/Microsoft.Data.SqlClient/).
|
||||
The Microsoft.Data.SqlClient NuGet package is available on [NuGet.org](https://www.nuget.org/packages/Microsoft.Data.SqlClient/).
|
||||
|
||||
## SNI Package References
|
||||
|
||||
For NetFx driver on Windows, package reference of [Microsoft.Data.SqlClient.SNI](https://www.nuget.org/packages/Microsoft.Data.SqlClient.SNI/) loads `x64` and `x86` platform specific `SNI.dll` libraries in client's build directories.
|
||||
|
||||
For NetCore driver on Windows, package reference of [runtime.native.System.Data.SqlClient.sni](https://www.nuget.org/packages/runtime.native.System.Data.SqlClient.sni/) loads `arm64`, `x64` and `x86` platform specific `SNI.dll` libraries in client's build directories.
|
||||
|
||||
## Building Driver
|
||||
|
||||
All necessary details and commands for building driver and running tests are available in [BUILDGUIDE.md](BUILDGUIDE.md).
|
||||
|
||||
## Release Notes
|
||||
|
||||
All release notes are available under [release-notes](release-notes).
|
||||
All preview and stable driver release notes are available under [release-notes](release-notes).
|
||||
|
||||
## Known issues
|
||||
## Guidelines for Creating Pull Requests
|
||||
|
||||
1. User Data Types (UDTs) may not work with Microsoft.Data.SqlClient.
|
||||
We love contributions from the community. To help improve the quality of our code, we encourage you to follow below guidelines:
|
||||
|
||||
- Code changes must adhere to [C# Programming Guide](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/index).
|
||||
- Driver code changes must be done considering cross-platform compatibility and supportability for all supported SQL and Azure Servers and client configurations.
|
||||
- Tests must be added is non-existent to assure near to 100% code coverage for all future changes.
|
||||
- Tests should be well structured and written well to be able to run in parallel using same client and server configurations (in an isolated mode). E.g. Consider using dynamic table/database object names instead of hardcoded values (Use existing tests for reference).
|
||||
- Written tests should not leave any residue on target server. Cleaning up all objects is highly appreciated to maintain test server health.
|
||||
- Avoid skipping tests if possible or running them conditionally. If conditions are not met, test coverage will not be 100%.
|
||||
|
||||
Thank you!
|
||||
|
||||
## Guidelines for Reporting Issues
|
||||
We appreciate you taking the time to test the driver, provide feedback and report any issues. It would be extremely helpful if you:
|
||||
|
||||
- Report each issue as a new issue (but check first if it's already been reported)
|
||||
- Try to be detailed in your report. Useful information for good bug reports include:
|
||||
* What you are seeing and what the expected behavior is
|
||||
* The version of the driver in use.
|
||||
* Environment details: e.g. .NET Framework / .NET Core version, client operating system
|
||||
* Table schema (for some issues the data types make a big difference!)
|
||||
* Any other relevant information you want to share
|
||||
- Try to provide a repro app demonstrating the isolated problem is possible.
|
||||
|
||||
Thank you!
|
||||
|
||||
## Reporting security issues and security bugs
|
||||
Security issues and bugs should be reported privately, via email, to the Microsoft Security Response Center (MSRC) [secure@microsoft.com](mailto:secure@microsoft.com). You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Further information, including the MSRC PGP key, can be found in the [Security TechCenter](https://technet.microsoft.com/en-us/security/ff852094.aspx).
|
||||
|
||||
## Still have questions?
|
||||
|
||||
Check out our [FAQ](https://github.com/dotnet/SqlClient/wiki/Frequently-Asked-Questions). Still not answered? Create an [issue](https://github.com/dotnet/SqlClient/issues/new/choose) to ask a question.
|
||||
|
||||
## License
|
||||
The Microsoft.Data.SqlClient Driver for SQL Server is licensed under the MIT license. See the [LICENSE](https://github.com/dotnet/SqlClient/blob/master/LICENSE) file for more details.
|
||||
|
||||
## Code of conduct
|
||||
|
||||
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" DefaultTargets="BuildAll" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="src/Directory.Build.props" />
|
||||
<Import Project="$(ToolsDir)targets\GenerateNugetPackage.targets" />
|
||||
|
||||
<PropertyGroup>
|
||||
<Configuration Condition="'$(Configuration)' == ''">Debug</Configuration>
|
||||
<Platform Condition="'$(Platform)' == ''">AnyCPU</Platform>
|
||||
<!-- Flag to control if NetFx driver should be built or not -->
|
||||
<IsEnabledNetFx Condition="'$(IsEnabledNetFx)' == '' AND '$(TargetsWindows)' == 'true'">true</IsEnabledNetFx>
|
||||
<IsEnabledNetFx Condition="'$(TargetsUnix)' == 'true'">false</IsEnabledNetFx>
|
||||
<TestOS Condition="'$(TestTargetOS)' == '' AND '$(TargetsWindows)' == 'true'">Windows</TestOS>
|
||||
<TestOS Condition="'$(TestTargetOS)' == '' AND '$(TargetsUnix)' == 'true'">Unix</TestOS>
|
||||
<GenerateNuget Condition="'$(GenerateNuget)' == ''">true</GenerateNuget>
|
||||
<ProjectProperties>Configuration=$(Configuration);AssemblyFileVersion=$(AssemblyFileVersion);TargetsWindows=$(TargetsWindows);TargetsUnix=$(TargetsUnix);</ProjectProperties>
|
||||
<TestProjectProperties>BuildProjectReferences=false;$(ProjectProperties);</TestProjectProperties>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Populate all managed projects -->
|
||||
<ItemGroup>
|
||||
<NetFxDriver Include="**/netfx/**/Microsoft.Data.SqlClient*.csproj" Condition="'$(IsEnabledNetFx)' == 'true'"/>
|
||||
<NetCoreDriver Include="**/netcore/**/Microsoft.Data.SqlClient*.csproj"/>
|
||||
<FunctionalTests Include="**/tools/TDS/TDS/TDS.csproj" />
|
||||
<FunctionalTests Include="**/tools/TDS/TDS.EndPoint/TDS.EndPoint.csproj" />
|
||||
<FunctionalTests Include="**/tools/TDS/TDS.Servers/TDS.Servers.csproj" />
|
||||
<FunctionalTests Include="**/tools/CoreFx.Private.TestUtilities/CoreFx.Private.TestUtilities.csproj" />
|
||||
<FunctionalTests Include="**/ManualTests/SQL/UdtTest/UDTs/Address/Address.csproj" />
|
||||
<FunctionalTests Include="**/Microsoft.Data.SqlClient.Tests.csproj" />
|
||||
|
||||
<ManualTests Include="**/ManualTests/SQL/UdtTest/UDTs/Address/Address.csproj" />
|
||||
<ManualTests Include="**/ManualTests/SQL/UdtTest/UDTs/Circle/Circle.csproj" />
|
||||
<ManualTests Include="**/ManualTests/SQL/UdtTest/UDTs/Shapes/Shapes.csproj" />
|
||||
<ManualTests Include="**/ManualTests/SQL/UdtTest/UDTs/Utf8String/Utf8String.csproj" />
|
||||
<ManualTests Include="**/tools/CoreFx.Private.TestUtilities/CoreFx.Private.TestUtilities.csproj" />
|
||||
<ManualTests Include="**/ManualTests/Microsoft.Data.SqlClient.ManualTesting.Tests.csproj" />
|
||||
|
||||
<NugetPackageSources Include="https://api.nuget.org/v3/index.json" />
|
||||
<NugetPackageSources Include="https://dotnetfeed.blob.core.windows.net/dotnet-core/index.json" />
|
||||
<NugetPackageSources Include="https://dotnet.myget.org/F/dotnet-core/api/v3/index.json" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- Top Level Build targets -->
|
||||
<Target Name="Restore" DependsOnTargets="RestoreNetCore;RestoreNetFx" />
|
||||
<Target Name="BuildAll" DependsOnTargets="BuildNetFx;BuildNetCore" />
|
||||
<Target Name="BuildAllConfigurations" DependsOnTargets="BuildNetFx;BuildNetCoreAllOS;GenerateNugetPackage" />
|
||||
<Target Name="BuildTestsNetCore" DependsOnTargets="BuildFunctionalTestsNetCore;BuildManualTestsNetCore" />
|
||||
<Target Name="BuildTestsNetFx" DependsOnTargets="BuildFunctionalTestsNetFx;BuildManualTestsNetFx" />
|
||||
|
||||
<Target Name="RestoreNetCore">
|
||||
<PropertyGroup>
|
||||
<NugetPackageSourcesProperty>@(NugetPackageSources)</NugetPackageSourcesProperty>
|
||||
</PropertyGroup>
|
||||
<MSBuild Projects="@(NetCoreDriver)" Targets="restore" Properties="RestoreSources=$(NugetPackageSourcesProperty);TestTargetOS=$(TestOS)netcoreapp" />
|
||||
<MSBuild Projects="@(ManualTests)" Targets="restore" Properties="RestoreSources=$(NugetPackageSourcesProperty);TestTargetOS=$(TestOS)netcoreapp" />
|
||||
<MSBuild Projects="@(FunctionalTests)" Targets="restore" Properties="RestoreSources=$(NugetPackageSourcesProperty);TestTargetOS=$(TestOS)netcoreapp" />
|
||||
</Target>
|
||||
|
||||
<Target Name="RestoreNetFx" Condition="'$(IsEnabledNetFx)' == 'true'">
|
||||
<PropertyGroup>
|
||||
<NugetPackageSourcesProperty>@(NugetPackageSources)</NugetPackageSourcesProperty>
|
||||
</PropertyGroup>
|
||||
<MSBuild Projects="@(NetFxDriver)" Targets="restore" Properties="RestoreSources=$(NugetPackageSourcesProperty);TestTargetOS=$(TestOS)netfx" />
|
||||
<MSBuild Projects="@(ManualTests)" Targets="restore" Properties="RestoreSources=$(NugetPackageSourcesProperty);TestTargetOS=$(TestOS)netfx" />
|
||||
<MSBuild Projects="@(FunctionalTests)" Targets="restore" Properties="RestoreSources=$(NugetPackageSourcesProperty);TestTargetOS=$(TestOS)netfx" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildNetFx" DependsOnTargets="RestoreNetFx" Condition="'$(IsEnabledNetFx)' == 'true'">
|
||||
<MSBuild Projects="@(NetFxDriver)" Properties="Platform=AnyCPU;$(ProjectProperties)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildNetCore" DependsOnTargets="RestoreNetCore">
|
||||
<MSBuild Projects="@(NetCoreDriver)" Properties="Platform=AnyCPU;$(ProjectProperties)" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildNetCoreAllOS" DependsOnTargets="RestoreNetCore">
|
||||
<MSBuild Projects="@(NetCoreDriver)" Properties="$(ProjectProperties);Platform=AnyCPU;OSGroup=Unix;" RemoveProperties="TargetsWindows;TargetsUnix;" />
|
||||
<MSBuild Projects="@(NetCoreDriver)" Properties="$(ProjectProperties);Platform=AnyCPU;OSGroup=Windows_NT;" RemoveProperties="TargetsWindows;TargetsUnix;" />
|
||||
<MSBuild Projects="@(NetCoreDriver)" Properties="$(ProjectProperties);Platform=AnyCPU;OSGroup=AnyOS;" RemoveProperties="TargetsWindows;TargetsUnix;" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildFunctionalTestsNetCore" DependsOnTargets="RestoreNetCore">
|
||||
<MSBuild Projects="@(FunctionalTests)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(TestProjectProperties);Platform=AnyCPU;" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildManualTestsNetCore" DependsOnTargets="RestoreNetCore">
|
||||
<MSBuild Projects="@(ManualTests)" Properties="TestTargetOS=$(TestOS)netcoreapp;$(TestProjectProperties);Platform=AnyCPU;" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildFunctionalTestsNetFx" DependsOnTargets="RestoreNetFx" Condition="'$(IsEnabledNetFx)' == 'true'">
|
||||
<!-- Only build platform specific tests on Windows for .Net Framework -->
|
||||
<MSBuild Projects="@(FunctionalTests)" Properties="TestTargetOS=$(TestOS)netfx;$(TestProjectProperties);Platform=$(Platform);" />
|
||||
</Target>
|
||||
|
||||
<Target Name="BuildManualTestsNetFx" DependsOnTargets="RestoreNetFx" Condition="'$(IsEnabledNetFx)' == 'true'">
|
||||
<MSBuild Projects="@(ManualTests)" Properties="TestTargetOS=$(TestOS)netfx;$(TestProjectProperties);Platform=$(Platform);" />
|
||||
</Target>
|
||||
|
||||
<Target Name="Clean">
|
||||
<RemoveDir Directories='$([System.IO.Directory]::GetDirectories(".","bin", SearchOption.AllDirectories))' />
|
||||
<RemoveDir Directories='$([System.IO.Directory]::GetDirectories(".","obj", SearchOption.AllDirectories))' />
|
||||
<RemoveDir Directories='$([System.IO.Directory]::GetDirectories(".","packages", SearchOption.AllDirectories))' />
|
||||
<RemoveDir Directories='$([System.IO.Directory]::GetDirectories(".",".nuget", SearchOption.AllDirectories))' />
|
||||
</Target>
|
||||
|
||||
</Project>
|
|
@ -0,0 +1,49 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetsWindows Condition="'$(OS)' == 'Windows_NT' AND '$(OSGroup)' == ''">true</TargetsWindows>
|
||||
<TargetsWindows Condition="'$(OS)' != 'Windows_NT' AND '$(OSGroup)' == ''">false</TargetsWindows>
|
||||
<TargetsWindows Condition="'$(OSGroup)' == 'Windows_NT'">true</TargetsWindows>
|
||||
<TargetsUnix Condition="'$(OS)' == 'Unix' AND '$(OSGroup)' == ''">true</TargetsUnix>
|
||||
<TargetsUnix Condition="'$(OS)' != 'Unix' AND '$(OSGroup)' == ''">false</TargetsUnix>
|
||||
<TargetsUnix Condition="'$(OSGroup)' == 'Unix'">true</TargetsUnix>
|
||||
<TargetsAnyOS Condition="'$(OSGroup)' == 'AnyOS'">true</TargetsAnyOS>
|
||||
<IsSourceProject Condition="$([System.Text.RegularExpressions.Regex]::IsMatch($(MSBuildProjectDirectory), 'src%24'))">true</IsSourceProject>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<ProjectDir>$(MSBuildThisFileDirectory)</ProjectDir>
|
||||
<RepoRoot>$(ProjectDir)..\</RepoRoot>
|
||||
<ManagedSourceCode>$(ProjectDir)Microsoft.Data.SqlClient\</ManagedSourceCode>
|
||||
<NetCoreSource>$(ManagedSourceCode)netcore\</NetCoreSource>
|
||||
<NetFxSource>$(ManagedSourceCode)netfx\</NetFxSource>
|
||||
<NetFxResources>$(ManagedSourceCode)netfx\src\Resources\</NetFxResources>
|
||||
<ObjFolder>$(RepoRoot)obj\</ObjFolder>
|
||||
<CommonPath>$(NetCoreSource)src\Common\src</CommonPath>
|
||||
<CommonTestPath>$(NetCoreSource)src\Common\tests</CommonTestPath>
|
||||
<TestsPath>$(ProjectDir)Microsoft.Data.SqlClient\tests\</TestsPath>
|
||||
<BinFolder Condition="'$(TargetsWindows)' == 'true'">$(RepoRoot)bin\Windows_NT\</BinFolder>
|
||||
<BinFolder Condition="'$(TargetsAnyOS)' == 'true'">$(RepoRoot)bin\AnyOS\</BinFolder>
|
||||
<BinFolder Condition="'$(TargetsUnix)' == 'true'">$(RepoRoot)bin\Unix\</BinFolder>
|
||||
<ToolsDir Condition="'$(ToolsDir)'==''">$(RepoRoot)tools\</ToolsDir>
|
||||
<PackagesDir Condition="'$(PackagesDir)'==''">$(RepoRoot)packages\</PackagesDir>
|
||||
<NuGetRoot Condition="'$(NuGetRoot)' == ''">$(RepoRoot).nuget\</NuGetRoot>
|
||||
<NuGetCmd>$(NuGetRoot)nuget.exe</NuGetCmd>
|
||||
<!-- Respect environment variable for the .NET install directory if set; otherwise, use the current default location -->
|
||||
<DotNetRoot Condition="'$(DotNetRoot)' == ''">$(DOTNET_INSTALL_DIR)</DotNetRoot>
|
||||
<DotNetRoot Condition="'$(DotNetRoot)' == ''">$(RepoRoot).dotnet\</DotNetRoot>
|
||||
<DotNetRoot Condition="!HasTrailingSlash('$(DotNetRoot)')">$(DotNetRoot)\</DotNetRoot>
|
||||
<DotNetCmd>$(DotNetRoot)dotnet</DotNetCmd>
|
||||
<DotNetCmd Condition="'$(OS)' == 'Windows_NT'">$(DotNetCmd).exe</DotNetCmd>
|
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
|
||||
</PropertyGroup>
|
||||
|
||||
<!-- Provides Version properties -->
|
||||
<Import Project="$(ToolsDir)props\Versions.props" />
|
||||
<!-- Provides Tool properties -->
|
||||
<Import Project="$(ToolsDir)props\Tools.props" />
|
||||
<!-- Provides Build properties -->
|
||||
<Import Project="$(ToolsDir)props\AssemblyInfo.props" />
|
||||
<Import Project="$(ToolsDir)props\AssemblyRef.props" />
|
||||
</Project>
|
|
@ -0,0 +1,579 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.27004.2010
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Data.SqlClient", "Microsoft.Data.SqlClient\netfx\src\Microsoft.Data.SqlClient.csproj", "{407890AC-9876-4FEF-A6F1-F36A876BAADE}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{0CC4817A-12F3-4357-912C-09315FAAD008}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TDS.EndPoint", "Microsoft.Data.SqlClient\tests\tools\TDS\TDS.EndPoint\TDS.EndPoint.csproj", "{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TDS.Servers", "Microsoft.Data.SqlClient\tests\tools\TDS\TDS.Servers\TDS.Servers.csproj", "{978063D3-FBB5-4E10-8C45-67C90BE1B931}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TDS", "Microsoft.Data.SqlClient\tests\tools\TDS\TDS\TDS.csproj", "{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CoreFx.Private.TestUtilities", "Microsoft.Data.SqlClient\tests\tools\CoreFx.Private.TestUtilities\CoreFx.Private.TestUtilities.csproj", "{EBDB0247-CA43-4226-B7A1-8FEF21061D09}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Data.SqlClient.Tests", "Microsoft.Data.SqlClient\tests\FunctionalTests\Microsoft.Data.SqlClient.Tests.csproj", "{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Data.SqlClient", "Microsoft.Data.SqlClient\netcore\src\Microsoft.Data.SqlClient.csproj", "{37431336-5307-4184-9356-C4B7E47DC714}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "netcore", "netcore", "{28E5EFE6-C9DD-4FF9-9FEC-532F72DFFA6E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "netfx", "netfx", "{3FDD425C-FE01-4B56-863E-1FCDD0677CF5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Address", "Microsoft.Data.SqlClient\tests\ManualTests\SQL\UdtTest\UDTs\Address\Address.csproj", "{D1392B54-998A-4F27-BC17-4CE149117BCC}"
|
||||
ProjectSection(ProjectDependencies) = postProject
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE} = {407890AC-9876-4FEF-A6F1-F36A876BAADE}
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Data.SqlClient.ManualTesting.Tests", "Microsoft.Data.SqlClient\tests\ManualTests\Microsoft.Data.SqlClient.ManualTesting.Tests.csproj", "{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Circle", "Microsoft.Data.SqlClient\tests\ManualTests\SQL\UdtTest\UDTs\Circle\Circle.csproj", "{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shapes", "Microsoft.Data.SqlClient\tests\ManualTests\SQL\UdtTest\UDTs\Shapes\Shapes.csproj", "{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Utf8String", "Microsoft.Data.SqlClient\tests\ManualTests\SQL\UdtTest\UDTs\Utf8String\Utf8String.csproj", "{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{A2E7E470-5EFF-4828-B55E-FCBA3650F51C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Data.SqlClient", "Microsoft.Data.SqlClient\netcore\ref\Microsoft.Data.SqlClient.csproj", "{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ref", "ref", "{771F3F1E-7A68-4A9D-ADA8-A24F1D5BE71D}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Data.SqlClient", "Microsoft.Data.SqlClient\netfx\ref\Microsoft.Data.SqlClient.csproj", "{412BCCC8-19F6-489A-B594-E9A506816155}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
net46-Debug|Any CPU = net46-Debug|Any CPU
|
||||
net46-Debug|x64 = net46-Debug|x64
|
||||
net46-Debug|x86 = net46-Debug|x86
|
||||
net46-Release|Any CPU = net46-Release|Any CPU
|
||||
net46-Release|x64 = net46-Release|x64
|
||||
net46-Release|x86 = net46-Release|x86
|
||||
netcoreapp2.1-Debug|Any CPU = netcoreapp2.1-Debug|Any CPU
|
||||
netcoreapp2.1-Debug|x64 = netcoreapp2.1-Debug|x64
|
||||
netcoreapp2.1-Debug|x86 = netcoreapp2.1-Debug|x86
|
||||
netcoreapp2.1-Release|Any CPU = netcoreapp2.1-Release|Any CPU
|
||||
netcoreapp2.1-Release|x64 = netcoreapp2.1-Release|x64
|
||||
netcoreapp2.1-Release|x86 = netcoreapp2.1-Release|x86
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Debug|x64.Build.0 = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Debug|x86.Build.0 = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Release|x64.ActiveCfg = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Release|x64.Build.0 = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Release|x86.ActiveCfg = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.net46-Release|x86.Build.0 = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Debug|x64.Build.0 = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Debug|x86.Build.0 = Debug|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Release|x64.ActiveCfg = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Release|x64.Build.0 = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Release|x86.ActiveCfg = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.netcoreapp2.1-Release|x86.Build.0 = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Release|x64.Build.0 = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45}.Release|x86.Build.0 = Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Release|x64.Build.0 = Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931}.Release|x86.Build.0 = Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Release|x64.Build.0 = Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9}.Release|x86.Build.0 = Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Release|x64.Build.0 = Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9}.Release|x86.Build.0 = Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.net46-Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.net46-Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.net46-Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.net46-Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.net46-Release|x64.ActiveCfg = Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.net46-Release|x86.ActiveCfg = Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Release|x64.Build.0 = Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{37431336-5307-4184-9356-C4B7E47DC714}.Release|x86.Build.0 = Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Release|x64.Build.0 = Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC}.Release|x86.Build.0 = Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|x64.Build.0 = Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5}.Release|x86.Build.0 = Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Release|x64.Build.0 = Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F}.Release|x86.Build.0 = Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Debug|x64.ActiveCfg = net46-Debug|x64
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Debug|x64.Build.0 = net46-Debug|x64
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Debug|x86.ActiveCfg = net46-Debug|x86
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Debug|x86.Build.0 = net46-Debug|x86
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Release|x64.ActiveCfg = net46-Release|x64
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Release|x64.Build.0 = net46-Release|x64
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Release|x86.ActiveCfg = net46-Release|x86
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.net46-Release|x86.Build.0 = net46-Release|x86
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Release|x64.Build.0 = Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E}.Release|x86.Build.0 = Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.net46-Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.net46-Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.net46-Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.net46-Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.net46-Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.net46-Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Debug|Any CPU.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Debug|x64.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Debug|x64.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Debug|x86.ActiveCfg = netcoreapp2.1-Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Debug|x86.Build.0 = netcoreapp2.1-Debug|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Release|Any CPU.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Release|Any CPU.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Release|x64.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Release|x64.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Release|x86.ActiveCfg = netcoreapp2.1-Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.netcoreapp2.1-Release|x86.Build.0 = netcoreapp2.1-Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Release|x64.Build.0 = Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B}.Release|x86.Build.0 = Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Debug|x86.Build.0 = Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Debug|Any CPU.ActiveCfg = net46-Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Debug|Any CPU.Build.0 = net46-Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Debug|x64.ActiveCfg = net46-Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Debug|x64.Build.0 = net46-Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Debug|x86.ActiveCfg = net46-Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Debug|x86.Build.0 = net46-Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Release|Any CPU.ActiveCfg = net46-Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Release|Any CPU.Build.0 = net46-Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Release|x64.ActiveCfg = net46-Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Release|x64.Build.0 = net46-Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Release|x86.ActiveCfg = net46-Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.net46-Release|x86.Build.0 = net46-Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.netcoreapp2.1-Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.netcoreapp2.1-Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.netcoreapp2.1-Debug|x86.ActiveCfg = Debug|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.netcoreapp2.1-Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.netcoreapp2.1-Release|x64.ActiveCfg = Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.netcoreapp2.1-Release|x86.ActiveCfg = Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Release|x64.Build.0 = Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Release|x86.ActiveCfg = Release|Any CPU
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155}.Release|x86.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(NestedProjects) = preSolution
|
||||
{407890AC-9876-4FEF-A6F1-F36A876BAADE} = {3FDD425C-FE01-4B56-863E-1FCDD0677CF5}
|
||||
{1FF891B4-D3DE-4CCE-887C-CB48F5351A45} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{978063D3-FBB5-4E10-8C45-67C90BE1B931} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{8DC9D1A0-351B-47BC-A90F-B9DA542550E9} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{EBDB0247-CA43-4226-B7A1-8FEF21061D09} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{D2D1E2D1-B6E0-489F-A36D-1F3047AB87B9} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{37431336-5307-4184-9356-C4B7E47DC714} = {28E5EFE6-C9DD-4FF9-9FEC-532F72DFFA6E}
|
||||
{D1392B54-998A-4F27-BC17-4CE149117BCC} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{45DB5F86-7AE3-45C6-870D-F9357B66BDB5} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{6C88F00F-9597-43AD-9E5F-9B344DA3B16F} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{B73A7063-37C3-415D-AD53-BB3DA20ABD6E} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{E0A6BB21-574B-43D9-890D-6E1144F2EE9E} = {0CC4817A-12F3-4357-912C-09315FAAD008}
|
||||
{A2E7E470-5EFF-4828-B55E-FCBA3650F51C} = {28E5EFE6-C9DD-4FF9-9FEC-532F72DFFA6E}
|
||||
{1C9FC4B8-54BC-4B6C-BB3A-F5CD59D80A9B} = {A2E7E470-5EFF-4828-B55E-FCBA3650F51C}
|
||||
{771F3F1E-7A68-4A9D-ADA8-A24F1D5BE71D} = {3FDD425C-FE01-4B56-863E-1FCDD0677CF5}
|
||||
{412BCCC8-19F6-489A-B594-E9A506816155} = {771F3F1E-7A68-4A9D-ADA8-A24F1D5BE71D}
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {01D48116-37A2-4D33-B9EC-94793C702431}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,22 @@
|
|||
// 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.
|
||||
|
||||
namespace Microsoft.Data.SqlClient
|
||||
{
|
||||
public sealed partial class SqlCommand : System.Data.Common.DbCommand
|
||||
{
|
||||
// SqlCommand expects IDisposable methods to be implemented via System.ComponentModel.Component, which it no longer inherits from
|
||||
override protected void Dispose(bool disposing) { }
|
||||
}
|
||||
public sealed partial class SqlConnection : System.Data.Common.DbConnection
|
||||
{
|
||||
// SqlConection expects IDisposable methods to be implemented via System.ComponentModel.Component, which it no longer inherits from
|
||||
override protected void Dispose(bool disposing) { }
|
||||
}
|
||||
[System.ComponentModel.TypeConverter(typeof(SqlParameterConverter))]
|
||||
public sealed partial class SqlParameter
|
||||
{
|
||||
internal class SqlParameterConverter { }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,146 @@
|
|||
// 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.
|
||||
// ------------------------------------------------------------------------------
|
||||
// Changes to this file must follow the http://aka.ms/api-review process.
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
namespace Microsoft.Data.SqlClient.Server
|
||||
{
|
||||
[System.AttributeUsageAttribute(System.AttributeTargets.Field | System.AttributeTargets.Property | System.AttributeTargets.ReturnValue | System.AttributeTargets.Parameter, AllowMultiple=false, Inherited=false)]
|
||||
public partial class SqlFacetAttribute : System.Attribute
|
||||
{
|
||||
public SqlFacetAttribute() { }
|
||||
public bool IsFixedLength { get { throw null; } set { } }
|
||||
public bool IsNullable { get { throw null; } set { } }
|
||||
public int MaxSize { get { throw null; } set { } }
|
||||
public int Precision { get { throw null; } set { } }
|
||||
public int Scale { get { throw null; } set { } }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.Data.SqlClient
|
||||
{
|
||||
public partial class SqlDataReader : System.Data.Common.IDbColumnSchemaGenerator
|
||||
{
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<System.Data.Common.DbColumn> GetColumnSchema() { throw null; }
|
||||
}
|
||||
|
||||
public enum PoolBlockingPeriod
|
||||
{
|
||||
Auto = 0,
|
||||
AlwaysBlock = 1,
|
||||
NeverBlock = 2,
|
||||
}
|
||||
|
||||
public sealed partial class SqlConnectionStringBuilder : System.Data.Common.DbConnectionStringBuilder
|
||||
{
|
||||
public PoolBlockingPeriod PoolBlockingPeriod { get { throw null; } set { } }
|
||||
public Microsoft.Data.SqlClient.SqlConnectionColumnEncryptionSetting ColumnEncryptionSetting { get { throw null; } set { } }
|
||||
public string EnclaveAttestationUrl { get { throw null; } set { } }
|
||||
}
|
||||
public sealed partial class SqlParameter : System.Data.Common.DbParameter, System.ICloneable, System.Data.IDataParameter, System.Data.IDbDataParameter
|
||||
{
|
||||
public bool ForceColumnEncryption { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
|
||||
}
|
||||
public enum SqlCommandColumnEncryptionSetting
|
||||
{
|
||||
Disabled = 3,
|
||||
Enabled = 1,
|
||||
ResultSetOnly = 2,
|
||||
UseConnectionSetting = 0,
|
||||
}
|
||||
public sealed partial class SqlCommand : System.Data.Common.DbCommand, System.ICloneable
|
||||
{
|
||||
public SqlCommand(string cmdText, Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlTransaction transaction, Microsoft.Data.SqlClient.SqlCommandColumnEncryptionSetting columnEncryptionSetting) { }
|
||||
public Microsoft.Data.SqlClient.SqlCommandColumnEncryptionSetting ColumnEncryptionSetting { get { throw null; } }
|
||||
}
|
||||
public sealed partial class SqlConnection : System.Data.Common.DbConnection, System.ICloneable
|
||||
{
|
||||
public static System.TimeSpan ColumnEncryptionKeyCacheTtl { get { throw null; } set { } }
|
||||
public static bool ColumnEncryptionQueryMetadataCacheEnabled { get { throw null; } set { } }
|
||||
public static System.Collections.Generic.IDictionary<string, System.Collections.Generic.IList<string>> ColumnEncryptionTrustedMasterKeyPaths { get { throw null; } }
|
||||
public static void RegisterColumnEncryptionKeyStoreProviders(System.Collections.Generic.IDictionary<string, Microsoft.Data.SqlClient.SqlColumnEncryptionKeyStoreProvider> customProviders) { }
|
||||
}
|
||||
public enum SqlConnectionColumnEncryptionSetting
|
||||
{
|
||||
Disabled = 0,
|
||||
Enabled = 1,
|
||||
}
|
||||
public partial class SqlColumnEncryptionCertificateStoreProvider : Microsoft.Data.SqlClient.SqlColumnEncryptionKeyStoreProvider
|
||||
{
|
||||
public const string ProviderName = "MSSQL_CERTIFICATE_STORE";
|
||||
public SqlColumnEncryptionCertificateStoreProvider() { }
|
||||
public override byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) { throw null; }
|
||||
public override byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey) { throw null; }
|
||||
public override byte[] SignColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations) { throw null; }
|
||||
public override bool VerifyColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations, byte[] signature) { throw null; }
|
||||
}
|
||||
public partial class SqlColumnEncryptionCngProvider : Microsoft.Data.SqlClient.SqlColumnEncryptionKeyStoreProvider
|
||||
{
|
||||
public const string ProviderName = "MSSQL_CNG_STORE";
|
||||
public SqlColumnEncryptionCngProvider() { }
|
||||
public override byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) { throw null; }
|
||||
public override byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey) { throw null; }
|
||||
public override byte[] SignColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations) { throw null; }
|
||||
public override bool VerifyColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations, byte[] signature) { throw null; }
|
||||
}
|
||||
public partial class SqlColumnEncryptionCspProvider : Microsoft.Data.SqlClient.SqlColumnEncryptionKeyStoreProvider
|
||||
{
|
||||
public const string ProviderName = "MSSQL_CSP_PROVIDER";
|
||||
public SqlColumnEncryptionCspProvider() { }
|
||||
public override byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey) { throw null; }
|
||||
public override byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey) { throw null; }
|
||||
public override byte[] SignColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations) { throw null; }
|
||||
public override bool VerifyColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations, byte[] signature) { throw null; }
|
||||
}
|
||||
public abstract partial class SqlColumnEncryptionKeyStoreProvider
|
||||
{
|
||||
protected SqlColumnEncryptionKeyStoreProvider() { }
|
||||
public abstract byte[] DecryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] encryptedColumnEncryptionKey);
|
||||
public abstract byte[] EncryptColumnEncryptionKey(string masterKeyPath, string encryptionAlgorithm, byte[] columnEncryptionKey);
|
||||
public virtual byte[] SignColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations) { throw null; }
|
||||
public virtual bool VerifyColumnMasterKeyMetadata(string masterKeyPath, bool allowEnclaveComputations, byte[] signature) { throw null; }
|
||||
}
|
||||
public abstract partial class SqlColumnEncryptionEnclaveProvider
|
||||
{
|
||||
protected SqlColumnEncryptionEnclaveProvider() { }
|
||||
public abstract void CreateEnclaveSession(byte[] enclaveAttestationInfo, System.Security.Cryptography.ECDiffieHellmanCng clientDiffieHellmanKey, string attestationUrl, string servername, out Microsoft.Data.SqlClient.SqlEnclaveSession sqlEnclaveSession, out long counter);
|
||||
public abstract Microsoft.Data.SqlClient.SqlEnclaveAttestationParameters GetAttestationParameters();
|
||||
public abstract void GetEnclaveSession(string serverName, string attestationUrl, out Microsoft.Data.SqlClient.SqlEnclaveSession sqlEnclaveSession, out long counter);
|
||||
public abstract void InvalidateEnclaveSession(string serverName, string enclaveAttestationUrl, Microsoft.Data.SqlClient.SqlEnclaveSession enclaveSession);
|
||||
}
|
||||
public partial class SqlEnclaveAttestationParameters
|
||||
{
|
||||
public SqlEnclaveAttestationParameters(int protocol, byte[] input, System.Security.Cryptography.ECDiffieHellmanCng clientDiffieHellmanKey) { }
|
||||
public System.Security.Cryptography.ECDiffieHellmanCng ClientDiffieHellmanKey { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public int Protocol { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public byte[] GetInput() { throw null; }
|
||||
}
|
||||
public partial class SqlEnclaveSession
|
||||
{
|
||||
public SqlEnclaveSession(byte[] sessionKey, long sessionId) { }
|
||||
public long SessionId { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public byte[] GetSessionKey() { throw null; }
|
||||
}
|
||||
}
|
||||
|
||||
namespace Microsoft.Data.SqlTypes
|
||||
{
|
||||
public sealed partial class SqlFileStream : System.IO.Stream
|
||||
{
|
||||
public SqlFileStream(string path, byte[] transactionContext, System.IO.FileAccess access) { }
|
||||
public SqlFileStream(string path, byte[] transactionContext, System.IO.FileAccess access, System.IO.FileOptions options, System.Int64 allocationSize) { }
|
||||
public string Name { get { throw null; } }
|
||||
public byte[] TransactionContext { get { throw null; } }
|
||||
public override bool CanRead { get { throw null; } }
|
||||
public override bool CanSeek { get { throw null; } }
|
||||
public override bool CanWrite { get { throw null; } }
|
||||
public override long Length { get { throw null; } }
|
||||
public override long Position { get { throw null; } set { throw null; } }
|
||||
public override void Flush() { }
|
||||
public override int Read(byte[] buffer, int offset, int count) { throw null; }
|
||||
public override long Seek(long offset, System.IO.SeekOrigin origin) { throw null; }
|
||||
public override void SetLength(long value) { throw null; }
|
||||
public override void Write(byte[] buffer, int offset, int count) { throw null; }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,923 @@
|
|||
// 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.
|
||||
|
||||
namespace Microsoft.Data.SqlClient.Server
|
||||
{
|
||||
public sealed partial class InvalidUdtException : System.SystemException
|
||||
{
|
||||
internal InvalidUdtException() { }
|
||||
}
|
||||
public partial class SqlDataRecord : System.Data.IDataRecord
|
||||
{
|
||||
public SqlDataRecord(params Microsoft.Data.SqlClient.Server.SqlMetaData[] metaData) { }
|
||||
public virtual int FieldCount { get { throw null; } }
|
||||
public virtual object this[int ordinal] { get { throw null; } }
|
||||
public virtual object this[string name] { get { throw null; } }
|
||||
public virtual bool GetBoolean(int ordinal) { throw null; }
|
||||
public virtual byte GetByte(int ordinal) { throw null; }
|
||||
public virtual long GetBytes(int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) { throw null; }
|
||||
public virtual char GetChar(int ordinal) { throw null; }
|
||||
public virtual long GetChars(int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) { throw null; }
|
||||
System.Data.IDataReader System.Data.IDataRecord.GetData(int ordinal) { throw null; }
|
||||
public virtual string GetDataTypeName(int ordinal) { throw null; }
|
||||
public virtual System.DateTime GetDateTime(int ordinal) { throw null; }
|
||||
public virtual System.DateTimeOffset GetDateTimeOffset(int ordinal) { throw null; }
|
||||
public virtual decimal GetDecimal(int ordinal) { throw null; }
|
||||
public virtual double GetDouble(int ordinal) { throw null; }
|
||||
public virtual System.Type GetFieldType(int ordinal) { throw null; }
|
||||
public virtual float GetFloat(int ordinal) { throw null; }
|
||||
public virtual System.Guid GetGuid(int ordinal) { throw null; }
|
||||
public virtual short GetInt16(int ordinal) { throw null; }
|
||||
public virtual int GetInt32(int ordinal) { throw null; }
|
||||
public virtual long GetInt64(int ordinal) { throw null; }
|
||||
public virtual string GetName(int ordinal) { throw null; }
|
||||
public virtual int GetOrdinal(string name) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlBinary GetSqlBinary(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlBoolean GetSqlBoolean(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlByte GetSqlByte(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlBytes GetSqlBytes(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlChars GetSqlChars(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlDateTime GetSqlDateTime(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlDecimal GetSqlDecimal(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlDouble GetSqlDouble(int ordinal) { throw null; }
|
||||
public virtual System.Type GetSqlFieldType(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlGuid GetSqlGuid(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlInt16 GetSqlInt16(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlInt32 GetSqlInt32(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlInt64 GetSqlInt64(int ordinal) { throw null; }
|
||||
public virtual Microsoft.Data.SqlClient.Server.SqlMetaData GetSqlMetaData(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlMoney GetSqlMoney(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlSingle GetSqlSingle(int ordinal) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlString GetSqlString(int ordinal) { throw null; }
|
||||
public virtual object GetSqlValue(int ordinal) { throw null; }
|
||||
public virtual int GetSqlValues(object[] values) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlXml GetSqlXml(int ordinal) { throw null; }
|
||||
public virtual string GetString(int ordinal) { throw null; }
|
||||
public virtual System.TimeSpan GetTimeSpan(int ordinal) { throw null; }
|
||||
public virtual object GetValue(int ordinal) { throw null; }
|
||||
public virtual int GetValues(object[] values) { throw null; }
|
||||
public virtual bool IsDBNull(int ordinal) { throw null; }
|
||||
public virtual void SetBoolean(int ordinal, bool value) { }
|
||||
public virtual void SetByte(int ordinal, byte value) { }
|
||||
public virtual void SetBytes(int ordinal, long fieldOffset, byte[] buffer, int bufferOffset, int length) { }
|
||||
public virtual void SetChar(int ordinal, char value) { }
|
||||
public virtual void SetChars(int ordinal, long fieldOffset, char[] buffer, int bufferOffset, int length) { }
|
||||
public virtual void SetDateTime(int ordinal, System.DateTime value) { }
|
||||
public virtual void SetDateTimeOffset(int ordinal, System.DateTimeOffset value) { }
|
||||
public virtual void SetDBNull(int ordinal) { }
|
||||
public virtual void SetDecimal(int ordinal, decimal value) { }
|
||||
public virtual void SetDouble(int ordinal, double value) { }
|
||||
public virtual void SetFloat(int ordinal, float value) { }
|
||||
public virtual void SetGuid(int ordinal, System.Guid value) { }
|
||||
public virtual void SetInt16(int ordinal, short value) { }
|
||||
public virtual void SetInt32(int ordinal, int value) { }
|
||||
public virtual void SetInt64(int ordinal, long value) { }
|
||||
public virtual void SetSqlBinary(int ordinal, System.Data.SqlTypes.SqlBinary value) { }
|
||||
public virtual void SetSqlBoolean(int ordinal, System.Data.SqlTypes.SqlBoolean value) { }
|
||||
public virtual void SetSqlByte(int ordinal, System.Data.SqlTypes.SqlByte value) { }
|
||||
public virtual void SetSqlBytes(int ordinal, System.Data.SqlTypes.SqlBytes value) { }
|
||||
public virtual void SetSqlChars(int ordinal, System.Data.SqlTypes.SqlChars value) { }
|
||||
public virtual void SetSqlDateTime(int ordinal, System.Data.SqlTypes.SqlDateTime value) { }
|
||||
public virtual void SetSqlDecimal(int ordinal, System.Data.SqlTypes.SqlDecimal value) { }
|
||||
public virtual void SetSqlDouble(int ordinal, System.Data.SqlTypes.SqlDouble value) { }
|
||||
public virtual void SetSqlGuid(int ordinal, System.Data.SqlTypes.SqlGuid value) { }
|
||||
public virtual void SetSqlInt16(int ordinal, System.Data.SqlTypes.SqlInt16 value) { }
|
||||
public virtual void SetSqlInt32(int ordinal, System.Data.SqlTypes.SqlInt32 value) { }
|
||||
public virtual void SetSqlInt64(int ordinal, System.Data.SqlTypes.SqlInt64 value) { }
|
||||
public virtual void SetSqlMoney(int ordinal, System.Data.SqlTypes.SqlMoney value) { }
|
||||
public virtual void SetSqlSingle(int ordinal, System.Data.SqlTypes.SqlSingle value) { }
|
||||
public virtual void SetSqlString(int ordinal, System.Data.SqlTypes.SqlString value) { }
|
||||
public virtual void SetSqlXml(int ordinal, System.Data.SqlTypes.SqlXml value) { }
|
||||
public virtual void SetString(int ordinal, string value) { }
|
||||
public virtual void SetTimeSpan(int ordinal, System.TimeSpan value) { }
|
||||
public virtual void SetValue(int ordinal, object value) { }
|
||||
public virtual int SetValues(params object[] values) { throw null; }
|
||||
}
|
||||
public enum DataAccessKind
|
||||
{
|
||||
None = 0,
|
||||
Read = 1
|
||||
}
|
||||
public enum SystemDataAccessKind
|
||||
{
|
||||
None = 0,
|
||||
Read = 1
|
||||
}
|
||||
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple = false, Inherited = false), System.SerializableAttribute]
|
||||
public partial class SqlFunctionAttribute : System.Attribute
|
||||
{
|
||||
public SqlFunctionAttribute() { }
|
||||
public bool IsDeterministic { get { throw null; } set { } }
|
||||
public DataAccessKind DataAccess { get { throw null; } set { } }
|
||||
public SystemDataAccessKind SystemDataAccess { get { throw null; } set { } }
|
||||
public bool IsPrecise { get { throw null; } set { } }
|
||||
public string Name { get { throw null; } set { } }
|
||||
public string TableDefinition { get { throw null; } set { } }
|
||||
public string FillRowMethodName { get { throw null; } set { } }
|
||||
}
|
||||
|
||||
public sealed partial class SqlMetaData
|
||||
{
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, byte precision, byte scale) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, byte precision, byte scale, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, byte precision, byte scale, long locale, System.Data.SqlTypes.SqlCompareOptions compareOptions, System.Type userDefinedType) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, byte precision, byte scale, long localeId, System.Data.SqlTypes.SqlCompareOptions compareOptions, System.Type userDefinedType, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, long locale, System.Data.SqlTypes.SqlCompareOptions compareOptions) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, long maxLength, long locale, System.Data.SqlTypes.SqlCompareOptions compareOptions, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, string database, string owningSchema, string objectName) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, string database, string owningSchema, string objectName, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, System.Type userDefinedType) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, System.Type userDefinedType, string serverTypeName) { }
|
||||
public SqlMetaData(string name, System.Data.SqlDbType dbType, System.Type userDefinedType, string serverTypeName, bool useServerDefault, bool isUniqueKey, Microsoft.Data.SqlClient.SortOrder columnSortOrder, int sortOrdinal) { }
|
||||
|
||||
public System.Data.SqlTypes.SqlCompareOptions CompareOptions { get { throw null; } }
|
||||
public System.Data.DbType DbType { get { throw null; } }
|
||||
public bool IsUniqueKey { get { throw null; } }
|
||||
public long LocaleId { get { throw null; } }
|
||||
public static long Max { get { throw null; } }
|
||||
public long MaxLength { get { throw null; } }
|
||||
public string Name { get { throw null; } }
|
||||
public byte Precision { get { throw null; } }
|
||||
public byte Scale { get { throw null; } }
|
||||
public Microsoft.Data.SqlClient.SortOrder SortOrder { get { throw null; } }
|
||||
public int SortOrdinal { get { throw null; } }
|
||||
public System.Data.SqlDbType SqlDbType { get { throw null; } }
|
||||
public System.Type Type{ get { throw null; } }
|
||||
public string TypeName { get { throw null; } }
|
||||
public bool UseServerDefault { get { throw null; } }
|
||||
public string XmlSchemaCollectionDatabase { get { throw null; } }
|
||||
public string XmlSchemaCollectionName { get { throw null; } }
|
||||
public string XmlSchemaCollectionOwningSchema { get { throw null; } }
|
||||
public bool Adjust(bool value) { throw null; }
|
||||
public byte Adjust(byte value) { throw null; }
|
||||
public byte[] Adjust(byte[] value) { throw null; }
|
||||
public char Adjust(char value) { throw null; }
|
||||
public char[] Adjust(char[] value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlBinary Adjust(System.Data.SqlTypes.SqlBinary value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlBoolean Adjust(System.Data.SqlTypes.SqlBoolean value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlByte Adjust(System.Data.SqlTypes.SqlByte value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlBytes Adjust(System.Data.SqlTypes.SqlBytes value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlChars Adjust(System.Data.SqlTypes.SqlChars value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlDateTime Adjust(System.Data.SqlTypes.SqlDateTime value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlDecimal Adjust(System.Data.SqlTypes.SqlDecimal value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlDouble Adjust(System.Data.SqlTypes.SqlDouble value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlGuid Adjust(System.Data.SqlTypes.SqlGuid value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlInt16 Adjust(System.Data.SqlTypes.SqlInt16 value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlInt32 Adjust(System.Data.SqlTypes.SqlInt32 value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlInt64 Adjust(System.Data.SqlTypes.SqlInt64 value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlMoney Adjust(System.Data.SqlTypes.SqlMoney value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlSingle Adjust(System.Data.SqlTypes.SqlSingle value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlString Adjust(System.Data.SqlTypes.SqlString value) { throw null; }
|
||||
public System.Data.SqlTypes.SqlXml Adjust(System.Data.SqlTypes.SqlXml value) { throw null; }
|
||||
public System.DateTime Adjust(System.DateTime value) { throw null; }
|
||||
public System.DateTimeOffset Adjust(System.DateTimeOffset value) { throw null; }
|
||||
public decimal Adjust(decimal value) { throw null; }
|
||||
public double Adjust(double value) { throw null; }
|
||||
public System.Guid Adjust(System.Guid value) { throw null; }
|
||||
public short Adjust(short value) { throw null; }
|
||||
public int Adjust(int value) { throw null; }
|
||||
public long Adjust(long value) { throw null; }
|
||||
public object Adjust(object value) { throw null; }
|
||||
public float Adjust(float value) { throw null; }
|
||||
public string Adjust(string value) { throw null; }
|
||||
public System.TimeSpan Adjust(System.TimeSpan value) { throw null; }
|
||||
public static Microsoft.Data.SqlClient.Server.SqlMetaData InferFromValue(object value, string name) { throw null; }
|
||||
}
|
||||
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple = false, Inherited = false), System.SerializableAttribute]
|
||||
public sealed partial class SqlMethodAttribute : SqlFunctionAttribute
|
||||
{
|
||||
public SqlMethodAttribute() { }
|
||||
public bool OnNullCall { get { throw null; } set { } }
|
||||
public bool IsMutator { get { throw null; } set { } }
|
||||
public bool InvokeIfReceiverIsNull { get { throw null; } set { } }
|
||||
}
|
||||
public enum Format
|
||||
{
|
||||
Unknown = 0,
|
||||
Native = 1,
|
||||
UserDefined = 2
|
||||
}
|
||||
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple = false, Inherited = false)]
|
||||
public sealed partial class SqlUserDefinedAggregateAttribute : System.Attribute
|
||||
{
|
||||
public const int MaxByteSizeValue = 8000;
|
||||
public SqlUserDefinedAggregateAttribute(Format format) { }
|
||||
public int MaxByteSize { get { throw null; } set { } }
|
||||
public bool IsInvariantToDuplicates { get { throw null; } set { } }
|
||||
public bool IsInvariantToNulls { get { throw null; } set { } }
|
||||
public bool IsInvariantToOrder { get { throw null; } set { } }
|
||||
public bool IsNullIfEmpty { get { throw null; } set { } }
|
||||
public Format Format { get { throw null; } }
|
||||
public string Name { get { throw null; } set { } }
|
||||
}
|
||||
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple = false, Inherited = true)]
|
||||
public sealed partial class SqlUserDefinedTypeAttribute : System.Attribute
|
||||
{
|
||||
public SqlUserDefinedTypeAttribute(Format format) { }
|
||||
public int MaxByteSize { get { throw null; } set { } }
|
||||
public bool IsFixedLength { get { throw null; } set { } }
|
||||
public bool IsByteOrdered { get { throw null; } set { } }
|
||||
public Format Format { get { throw null; } }
|
||||
public string ValidationMethodName { get { throw null; } set { } }
|
||||
public string Name { get { throw null; } set { } }
|
||||
}
|
||||
public interface IBinarySerialize
|
||||
{
|
||||
void Read(System.IO.BinaryReader r);
|
||||
void Write(System.IO.BinaryWriter w);
|
||||
}
|
||||
}
|
||||
namespace Microsoft.Data.Sql
|
||||
{
|
||||
public sealed partial class SqlNotificationRequest
|
||||
{
|
||||
public SqlNotificationRequest() { }
|
||||
public SqlNotificationRequest(string userData, string options, int timeout) { }
|
||||
public string Options { get { throw null; } set { } }
|
||||
public int Timeout { get { throw null; } set { } }
|
||||
public string UserData { get { throw null; } set { } }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.Data.SqlClient
|
||||
{
|
||||
public enum ApplicationIntent
|
||||
{
|
||||
ReadOnly = 1,
|
||||
ReadWrite = 0,
|
||||
}
|
||||
public enum SortOrder
|
||||
{
|
||||
Ascending = 0,
|
||||
Descending = 1,
|
||||
Unspecified = -1,
|
||||
}
|
||||
public abstract partial class SqlAuthenticationInitializer
|
||||
{
|
||||
protected SqlAuthenticationInitializer() { }
|
||||
public abstract void Initialize();
|
||||
}
|
||||
public enum SqlAuthenticationMethod
|
||||
{
|
||||
ActiveDirectoryIntegrated = 3,
|
||||
ActiveDirectoryInteractive = 4,
|
||||
ActiveDirectoryPassword = 2,
|
||||
NotSpecified = 0,
|
||||
SqlPassword = 1,
|
||||
}
|
||||
public partial class SqlAuthenticationParameters
|
||||
{
|
||||
protected SqlAuthenticationParameters(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod, string serverName, string databaseName, string resource, string authority, string userId, string password, System.Guid connectionId) { }
|
||||
public Microsoft.Data.SqlClient.SqlAuthenticationMethod AuthenticationMethod { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Authority { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public System.Guid ConnectionId { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string DatabaseName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Password { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Resource { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string ServerName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string UserId { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public abstract partial class SqlAuthenticationProvider
|
||||
{
|
||||
protected SqlAuthenticationProvider() { }
|
||||
public abstract System.Threading.Tasks.Task<Microsoft.Data.SqlClient.SqlAuthenticationToken> AcquireTokenAsync(Microsoft.Data.SqlClient.SqlAuthenticationParameters parameters);
|
||||
public virtual void BeforeLoad(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod) { }
|
||||
public virtual void BeforeUnload(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod) { }
|
||||
public static Microsoft.Data.SqlClient.SqlAuthenticationProvider GetProvider(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod) { throw null; }
|
||||
public abstract bool IsSupported(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod);
|
||||
public static bool SetProvider(Microsoft.Data.SqlClient.SqlAuthenticationMethod authenticationMethod, Microsoft.Data.SqlClient.SqlAuthenticationProvider provider) { throw null; }
|
||||
}
|
||||
public partial class SqlAuthenticationToken
|
||||
{
|
||||
public SqlAuthenticationToken(string accessToken, System.DateTimeOffset expiresOn) { }
|
||||
public string AccessToken { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public System.DateTimeOffset ExpiresOn { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public sealed partial class SqlBulkCopy : System.IDisposable
|
||||
{
|
||||
public SqlBulkCopy(Microsoft.Data.SqlClient.SqlConnection connection) { }
|
||||
public SqlBulkCopy(Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions, Microsoft.Data.SqlClient.SqlTransaction externalTransaction) { }
|
||||
public SqlBulkCopy(string connectionString) { }
|
||||
public SqlBulkCopy(string connectionString, Microsoft.Data.SqlClient.SqlBulkCopyOptions copyOptions) { }
|
||||
public int BatchSize { get { throw null; } set { } }
|
||||
public int BulkCopyTimeout { get { throw null; } set { } }
|
||||
public Microsoft.Data.SqlClient.SqlBulkCopyColumnMappingCollection ColumnMappings { get { throw null; } }
|
||||
public string DestinationTableName { get { throw null; } set { } }
|
||||
public bool EnableStreaming { get { throw null; } set { } }
|
||||
public int NotifyAfter { get { throw null; } set { } }
|
||||
public event Microsoft.Data.SqlClient.SqlRowsCopiedEventHandler SqlRowsCopied { add { } remove { } }
|
||||
public void Close() { }
|
||||
void System.IDisposable.Dispose() { }
|
||||
public void WriteToServer(System.Data.Common.DbDataReader reader) { }
|
||||
public void WriteToServer(System.Data.IDataReader reader) { }
|
||||
public void WriteToServer(System.Data.DataTable table) { }
|
||||
public void WriteToServer(System.Data.DataTable table, System.Data.DataRowState rowState) { }
|
||||
public void WriteToServer(System.Data.DataRow[] rows) { }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataRow[] rows) { throw null; }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataRow[] rows, System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.IDataReader reader) { throw null; }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.IDataReader reader, System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.Common.DbDataReader reader) { throw null; }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.Common.DbDataReader reader, System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table) { throw null; }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table, System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table, System.Data.DataRowState rowState) { throw null; }
|
||||
public System.Threading.Tasks.Task WriteToServerAsync(System.Data.DataTable table, System.Data.DataRowState rowState, System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
}
|
||||
public sealed partial class SqlBulkCopyColumnMapping
|
||||
{
|
||||
public SqlBulkCopyColumnMapping() { }
|
||||
public SqlBulkCopyColumnMapping(int sourceColumnOrdinal, int destinationOrdinal) { }
|
||||
public SqlBulkCopyColumnMapping(int sourceColumnOrdinal, string destinationColumn) { }
|
||||
public SqlBulkCopyColumnMapping(string sourceColumn, int destinationOrdinal) { }
|
||||
public SqlBulkCopyColumnMapping(string sourceColumn, string destinationColumn) { }
|
||||
public string DestinationColumn { get { throw null; } set { } }
|
||||
public int DestinationOrdinal { get { throw null; } set { } }
|
||||
public string SourceColumn { get { throw null; } set { } }
|
||||
public int SourceOrdinal { get { throw null; } set { } }
|
||||
}
|
||||
public sealed partial class SqlBulkCopyColumnMappingCollection : System.Collections.CollectionBase
|
||||
{
|
||||
internal SqlBulkCopyColumnMappingCollection() { }
|
||||
public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping this[int index] { get { throw null; } }
|
||||
public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping bulkCopyColumnMapping) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(int sourceColumnIndex, int destinationColumnIndex) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(int sourceColumnIndex, string destinationColumn) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(string sourceColumn, int destinationColumnIndex) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping Add(string sourceColumn, string destinationColumn) { throw null; }
|
||||
public new void Clear() { }
|
||||
public bool Contains(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping value) { throw null; }
|
||||
public void CopyTo(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping[] array, int index) { }
|
||||
public int IndexOf(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping value) { throw null; }
|
||||
public void Insert(int index, Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping value) { }
|
||||
public void Remove(Microsoft.Data.SqlClient.SqlBulkCopyColumnMapping value) { }
|
||||
public new void RemoveAt(int index) { }
|
||||
}
|
||||
[System.FlagsAttribute]
|
||||
public enum SqlBulkCopyOptions
|
||||
{
|
||||
AllowEncryptedValueModifications = 64,
|
||||
CheckConstraints = 2,
|
||||
Default = 0,
|
||||
FireTriggers = 16,
|
||||
KeepIdentity = 1,
|
||||
KeepNulls = 8,
|
||||
TableLock = 4,
|
||||
UseInternalTransaction = 32,
|
||||
}
|
||||
public sealed partial class SqlClientFactory : System.Data.Common.DbProviderFactory
|
||||
{
|
||||
internal SqlClientFactory() { }
|
||||
public static readonly Microsoft.Data.SqlClient.SqlClientFactory Instance;
|
||||
public override System.Data.Common.DbCommand CreateCommand() { throw null; }
|
||||
public override System.Data.Common.DbCommandBuilder CreateCommandBuilder() { throw null; }
|
||||
public override System.Data.Common.DbConnection CreateConnection() { throw null; }
|
||||
public override System.Data.Common.DbConnectionStringBuilder CreateConnectionStringBuilder() { throw null; }
|
||||
public override System.Data.Common.DbDataAdapter CreateDataAdapter() { throw null; }
|
||||
public override System.Data.Common.DbParameter CreateParameter() { throw null; }
|
||||
}
|
||||
public static partial class SqlClientMetaDataCollectionNames
|
||||
{
|
||||
public static readonly string Columns;
|
||||
public static readonly string Databases;
|
||||
public static readonly string ForeignKeys;
|
||||
public static readonly string IndexColumns;
|
||||
public static readonly string Indexes;
|
||||
public static readonly string Parameters;
|
||||
public static readonly string ProcedureColumns;
|
||||
public static readonly string Procedures;
|
||||
public static readonly string Tables;
|
||||
public static readonly string UserDefinedTypes;
|
||||
public static readonly string Users;
|
||||
public static readonly string ViewColumns;
|
||||
public static readonly string Views;
|
||||
}
|
||||
public sealed partial class SqlCommand : System.Data.Common.DbCommand, System.ICloneable
|
||||
{
|
||||
public SqlCommand() { }
|
||||
public SqlCommand(string cmdText) { }
|
||||
public SqlCommand(string cmdText, Microsoft.Data.SqlClient.SqlConnection connection) { }
|
||||
public SqlCommand(string cmdText, Microsoft.Data.SqlClient.SqlConnection connection, Microsoft.Data.SqlClient.SqlTransaction transaction) { }
|
||||
public override string CommandText { get { throw null; } set { } }
|
||||
public override int CommandTimeout { get { throw null; } set { } }
|
||||
public override System.Data.CommandType CommandType { get { throw null; } set { } }
|
||||
public new Microsoft.Data.SqlClient.SqlConnection Connection { get { throw null; } set { } }
|
||||
protected override System.Data.Common.DbConnection DbConnection { get { throw null; } set { } }
|
||||
protected override System.Data.Common.DbParameterCollection DbParameterCollection { get { throw null; } }
|
||||
protected override System.Data.Common.DbTransaction DbTransaction { get { throw null; } set { } }
|
||||
public override bool DesignTimeVisible { get { throw null; } set { } }
|
||||
public new Microsoft.Data.SqlClient.SqlParameterCollection Parameters { get { throw null; } }
|
||||
public new Microsoft.Data.SqlClient.SqlTransaction Transaction { get { throw null; } set { } }
|
||||
public override System.Data.UpdateRowSource UpdatedRowSource { get { throw null; } set { } }
|
||||
public event System.Data.StatementCompletedEventHandler StatementCompleted { add { } remove { } }
|
||||
public override void Cancel() { }
|
||||
object System.ICloneable.Clone() { throw null; }
|
||||
public SqlCommand Clone() { throw null; }
|
||||
protected override System.Data.Common.DbParameter CreateDbParameter() { throw null; }
|
||||
public new Microsoft.Data.SqlClient.SqlParameter CreateParameter() { throw null; }
|
||||
protected override System.Data.Common.DbDataReader ExecuteDbDataReader(System.Data.CommandBehavior behavior) { throw null; }
|
||||
protected override System.Threading.Tasks.Task<System.Data.Common.DbDataReader> ExecuteDbDataReaderAsync(System.Data.CommandBehavior behavior, System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public override int ExecuteNonQuery() { throw null; }
|
||||
public override System.Threading.Tasks.Task<int> ExecuteNonQueryAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public System.IAsyncResult BeginExecuteNonQuery() { throw null; }
|
||||
public System.IAsyncResult BeginExecuteNonQuery(System.AsyncCallback callback, object stateObject) { throw null; }
|
||||
public int EndExecuteNonQuery(System.IAsyncResult asyncResult) { throw null; }
|
||||
public new Microsoft.Data.SqlClient.SqlDataReader ExecuteReader() { throw null; }
|
||||
public new Microsoft.Data.SqlClient.SqlDataReader ExecuteReader(System.Data.CommandBehavior behavior) { throw null; }
|
||||
public new System.Threading.Tasks.Task<Microsoft.Data.SqlClient.SqlDataReader> ExecuteReaderAsync() { throw null; }
|
||||
public new System.Threading.Tasks.Task<Microsoft.Data.SqlClient.SqlDataReader> ExecuteReaderAsync(System.Data.CommandBehavior behavior) { throw null; }
|
||||
public new System.Threading.Tasks.Task<Microsoft.Data.SqlClient.SqlDataReader> ExecuteReaderAsync(System.Data.CommandBehavior behavior, System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public new System.Threading.Tasks.Task<Microsoft.Data.SqlClient.SqlDataReader> ExecuteReaderAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public override object ExecuteScalar() { throw null; }
|
||||
public override System.Threading.Tasks.Task<object> ExecuteScalarAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public System.Xml.XmlReader ExecuteXmlReader() { throw null; }
|
||||
public System.Threading.Tasks.Task<System.Xml.XmlReader> ExecuteXmlReaderAsync() { throw null; }
|
||||
public System.Threading.Tasks.Task<System.Xml.XmlReader> ExecuteXmlReaderAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public System.IAsyncResult BeginExecuteXmlReader() { throw null; }
|
||||
public System.IAsyncResult BeginExecuteXmlReader(System.AsyncCallback callback, object stateObject) { throw null; }
|
||||
public System.Xml.XmlReader EndExecuteXmlReader(System.IAsyncResult asyncResult) { throw null; }
|
||||
public System.IAsyncResult BeginExecuteReader() { throw null; }
|
||||
public System.IAsyncResult BeginExecuteReader(System.AsyncCallback callback, object stateObject) { throw null; }
|
||||
public System.IAsyncResult BeginExecuteReader(System.AsyncCallback callback, object stateObject, System.Data.CommandBehavior behavior) { throw null; }
|
||||
public System.IAsyncResult BeginExecuteReader(System.Data.CommandBehavior behavior) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlDataReader EndExecuteReader(System.IAsyncResult asyncResult) { throw null; }
|
||||
public override void Prepare() { }
|
||||
public Microsoft.Data.Sql.SqlNotificationRequest Notification { get { throw null; } set { } }
|
||||
public void ResetCommandTimeout() { }
|
||||
}
|
||||
public sealed class SqlCommandBuilder : System.Data.Common.DbCommandBuilder
|
||||
{
|
||||
public SqlCommandBuilder() { }
|
||||
public SqlCommandBuilder(SqlDataAdapter adapter) { }
|
||||
public override System.Data.Common.CatalogLocation CatalogLocation { get { throw null; } set { } }
|
||||
public override string CatalogSeparator { get { throw null; } set { } }
|
||||
new public SqlDataAdapter DataAdapter { get { throw null; } set { } }
|
||||
public override string QuotePrefix { get { throw null; } set { } }
|
||||
public override string QuoteSuffix { get { throw null; } set { } }
|
||||
public override string SchemaSeparator { get { throw null; } set { } }
|
||||
new public SqlCommand GetInsertCommand() { throw null; }
|
||||
new public SqlCommand GetInsertCommand(bool useColumnsForParameterNames) { throw null; }
|
||||
new public SqlCommand GetUpdateCommand() { throw null; }
|
||||
new public SqlCommand GetUpdateCommand(bool useColumnsForParameterNames) { throw null; }
|
||||
new public SqlCommand GetDeleteCommand() { throw null; }
|
||||
new public SqlCommand GetDeleteCommand(bool useColumnsForParameterNames) { throw null; }
|
||||
protected override void ApplyParameterInfo(System.Data.Common.DbParameter parameter, System.Data.DataRow datarow, System.Data.StatementType statementType, bool whereClause) { }
|
||||
protected override string GetParameterName(int parameterOrdinal) { throw null; }
|
||||
protected override string GetParameterName(string parameterName) { throw null; }
|
||||
protected override string GetParameterPlaceholder(int parameterOrdinal) { throw null; }
|
||||
public static void DeriveParameters(SqlCommand command) { }
|
||||
protected override System.Data.DataTable GetSchemaTable(System.Data.Common.DbCommand srcCommand) { throw null; }
|
||||
protected override System.Data.Common.DbCommand InitializeCommand(System.Data.Common.DbCommand command) { throw null; }
|
||||
public override string QuoteIdentifier(string unquotedIdentifier) { throw null; }
|
||||
protected override void SetRowUpdatingHandler(System.Data.Common.DbDataAdapter adapter) { }
|
||||
public override string UnquoteIdentifier(string quotedIdentifier) { throw null; }
|
||||
}
|
||||
public sealed partial class SqlConnection : System.Data.Common.DbConnection, System.ICloneable
|
||||
{
|
||||
public SqlConnection() { }
|
||||
public SqlConnection(string connectionString) { }
|
||||
public SqlConnection(string connectionString, Microsoft.Data.SqlClient.SqlCredential credential) { }
|
||||
public System.Guid ClientConnectionId { get { throw null; } }
|
||||
object System.ICloneable.Clone() { throw null; }
|
||||
public override string ConnectionString { get { throw null; } set { } }
|
||||
public override int ConnectionTimeout { get { throw null; } }
|
||||
public override string Database { get { throw null; } }
|
||||
public override string DataSource { get { throw null; } }
|
||||
public bool FireInfoMessageEventOnUserErrors { get { throw null; } set { } }
|
||||
public int PacketSize { get { throw null; } }
|
||||
public override string ServerVersion { get { throw null; } }
|
||||
public override System.Data.ConnectionState State { get { throw null; } }
|
||||
public bool StatisticsEnabled { get { throw null; } set { } }
|
||||
public string WorkstationId { get { throw null; } }
|
||||
public Microsoft.Data.SqlClient.SqlCredential Credential { get { throw null; } set { } }
|
||||
public event Microsoft.Data.SqlClient.SqlInfoMessageEventHandler InfoMessage { add { } remove { } }
|
||||
protected override System.Data.Common.DbTransaction BeginDbTransaction(System.Data.IsolationLevel isolationLevel) { throw null; }
|
||||
public new Microsoft.Data.SqlClient.SqlTransaction BeginTransaction() { throw null; }
|
||||
public new Microsoft.Data.SqlClient.SqlTransaction BeginTransaction(System.Data.IsolationLevel iso) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction(System.Data.IsolationLevel iso, string transactionName) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlTransaction BeginTransaction(string transactionName) { throw null; }
|
||||
public override void ChangeDatabase(string database) { }
|
||||
public static void ClearAllPools() { }
|
||||
public static void ClearPool(Microsoft.Data.SqlClient.SqlConnection connection) { }
|
||||
public override void Close() { }
|
||||
public new Microsoft.Data.SqlClient.SqlCommand CreateCommand() { throw null; }
|
||||
protected override System.Data.Common.DbCommand CreateDbCommand() { throw null; }
|
||||
public override System.Data.DataTable GetSchema() { throw null; }
|
||||
public override System.Data.DataTable GetSchema(string collectionName) { throw null; }
|
||||
public override System.Data.DataTable GetSchema(string collectionName, string[] restrictionValues) { throw null; }
|
||||
public override void Open() { }
|
||||
public override System.Threading.Tasks.Task OpenAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public void ResetStatistics() { }
|
||||
public System.Collections.IDictionary RetrieveStatistics() { throw null; }
|
||||
public static void ChangePassword(string connectionString, string newPassword) { throw null; }
|
||||
public static void ChangePassword(string connectionString, Microsoft.Data.SqlClient.SqlCredential credential, System.Security.SecureString newPassword) { throw null; }
|
||||
public string AccessToken { get { throw null; } set { } }
|
||||
|
||||
}
|
||||
public sealed partial class SqlConnectionStringBuilder : System.Data.Common.DbConnectionStringBuilder
|
||||
{
|
||||
public SqlConnectionStringBuilder() { }
|
||||
public SqlConnectionStringBuilder(string connectionString) { }
|
||||
public Microsoft.Data.SqlClient.ApplicationIntent ApplicationIntent { get { throw null; } set { } }
|
||||
public string ApplicationName { get { throw null; } set { } }
|
||||
public string AttachDBFilename { get { throw null; } set { } }
|
||||
public int ConnectRetryCount { get { throw null; } set { } }
|
||||
public int ConnectRetryInterval { get { throw null; } set { } }
|
||||
public int ConnectTimeout { get { throw null; } set { } }
|
||||
public string CurrentLanguage { get { throw null; } set { } }
|
||||
public string DataSource { get { throw null; } set { } }
|
||||
public bool Encrypt { get { throw null; } set { } }
|
||||
public bool Enlist { get { throw null; } set { } }
|
||||
public string FailoverPartner { get { throw null; } set { } }
|
||||
public string InitialCatalog { get { throw null; } set { } }
|
||||
public bool IntegratedSecurity { get { throw null; } set { } }
|
||||
public override object this[string keyword] { get { throw null; } set { } }
|
||||
public override System.Collections.ICollection Keys { get { throw null; } }
|
||||
public int LoadBalanceTimeout { get { throw null; } set { } }
|
||||
public int MaxPoolSize { get { throw null; } set { } }
|
||||
public int MinPoolSize { get { throw null; } set { } }
|
||||
public bool MultipleActiveResultSets { get { throw null; } set { } }
|
||||
public bool MultiSubnetFailover { get { throw null; } set { } }
|
||||
public int PacketSize { get { throw null; } set { } }
|
||||
public string Password { get { throw null; } set { } }
|
||||
public bool PersistSecurityInfo { get { throw null; } set { } }
|
||||
public bool Pooling { get { throw null; } set { } }
|
||||
public bool Replication { get { throw null; } set { } }
|
||||
public string TransactionBinding { get { throw null; } set { } }
|
||||
public bool TrustServerCertificate { get { throw null; } set { } }
|
||||
public string TypeSystemVersion { get { throw null; } set { } }
|
||||
public string UserID { get { throw null; } set { } }
|
||||
public bool UserInstance { get { throw null; } set { } }
|
||||
public override System.Collections.ICollection Values { get { throw null; } }
|
||||
public string WorkstationID { get { throw null; } set { } }
|
||||
public override void Clear() { }
|
||||
public override bool ContainsKey(string keyword) { throw null; }
|
||||
public override bool Remove(string keyword) { throw null; }
|
||||
public override bool ShouldSerialize(string keyword) { throw null; }
|
||||
public override bool TryGetValue(string keyword, out object value) { throw null; }
|
||||
}
|
||||
public sealed partial class SqlDataAdapter : System.Data.Common.DbDataAdapter, System.Data.IDbDataAdapter, System.ICloneable
|
||||
{
|
||||
public SqlDataAdapter() { }
|
||||
public SqlDataAdapter(SqlCommand selectCommand) { }
|
||||
public SqlDataAdapter(string selectCommandText, string selectConnectionString) { }
|
||||
public SqlDataAdapter(string selectCommandText, SqlConnection selectConnection) { }
|
||||
new public SqlCommand DeleteCommand { get { throw null; } set { } }
|
||||
new public SqlCommand InsertCommand { get { throw null; } set { } }
|
||||
new public SqlCommand SelectCommand { get { throw null; } set { } }
|
||||
System.Data.IDbCommand System.Data.IDbDataAdapter.DeleteCommand { get { throw null; } set { } }
|
||||
System.Data.IDbCommand System.Data.IDbDataAdapter.InsertCommand { get { throw null; } set { } }
|
||||
System.Data.IDbCommand System.Data.IDbDataAdapter.SelectCommand { get { throw null; } set { } }
|
||||
System.Data.IDbCommand System.Data.IDbDataAdapter.UpdateCommand { get { throw null; } set { } }
|
||||
override public int UpdateBatchSize { get { throw null; } set { } }
|
||||
new public SqlCommand UpdateCommand { get { throw null; } set { } }
|
||||
public event SqlRowUpdatedEventHandler RowUpdated { add { } remove { } }
|
||||
public event SqlRowUpdatingEventHandler RowUpdating { add { } remove { } }
|
||||
protected override void OnRowUpdated(System.Data.Common.RowUpdatedEventArgs value) { }
|
||||
protected override void OnRowUpdating(System.Data.Common.RowUpdatingEventArgs value) { }
|
||||
object System.ICloneable.Clone() { throw null; }
|
||||
}
|
||||
public sealed partial class SqlDependency
|
||||
{
|
||||
public SqlDependency() { }
|
||||
public SqlDependency(SqlCommand command) { }
|
||||
public SqlDependency(SqlCommand command, string options, int timeout) { }
|
||||
public bool HasChanges { get { throw null; } }
|
||||
public string Id { get { throw null; } }
|
||||
public event OnChangeEventHandler OnChange { add { } remove { } }
|
||||
public void AddCommandDependency(SqlCommand command) { }
|
||||
public static bool Start(string connectionString) { throw null; }
|
||||
public static bool Start(string connectionString, string queue) { throw null; }
|
||||
public static bool Stop(string connectionString) { throw null; }
|
||||
public static bool Stop(string connectionString, string queue) { throw null; }
|
||||
}
|
||||
public delegate void OnChangeEventHandler(object sender, SqlNotificationEventArgs e);
|
||||
public partial class SqlNotificationEventArgs : System.EventArgs
|
||||
{
|
||||
public SqlNotificationEventArgs(SqlNotificationType type, SqlNotificationInfo info, SqlNotificationSource source) { }
|
||||
public SqlNotificationType Type { get { throw null; } }
|
||||
public SqlNotificationInfo Info { get { throw null; } }
|
||||
public SqlNotificationSource Source { get { throw null; } }
|
||||
}
|
||||
public enum SqlNotificationInfo
|
||||
{
|
||||
Truncate = 0,
|
||||
Insert = 1,
|
||||
Update = 2,
|
||||
Delete = 3,
|
||||
Drop = 4,
|
||||
Alter = 5,
|
||||
Restart = 6,
|
||||
Error = 7,
|
||||
Query = 8,
|
||||
Invalid = 9,
|
||||
Options = 10,
|
||||
Isolation = 11,
|
||||
Expired = 12,
|
||||
Resource = 13,
|
||||
PreviousFire = 14,
|
||||
TemplateLimit = 15,
|
||||
Merge = 16,
|
||||
Unknown = -1,
|
||||
AlreadyChanged = -2
|
||||
}
|
||||
public enum SqlNotificationSource
|
||||
{
|
||||
Data = 0,
|
||||
Timeout = 1,
|
||||
Object = 2,
|
||||
Database = 3,
|
||||
System = 4,
|
||||
Statement = 5,
|
||||
Environment = 6,
|
||||
Execution = 7,
|
||||
Owner = 8,
|
||||
Unknown = -1,
|
||||
Client = -2
|
||||
}
|
||||
public enum SqlNotificationType
|
||||
{
|
||||
Change = 0,
|
||||
Subscribe = 1,
|
||||
Unknown = -1
|
||||
}
|
||||
public sealed partial class SqlRowUpdatedEventArgs : System.Data.Common.RowUpdatedEventArgs
|
||||
{
|
||||
public SqlRowUpdatedEventArgs(System.Data.DataRow row, System.Data.IDbCommand command, System.Data.StatementType statementType, System.Data.Common.DataTableMapping tableMapping)
|
||||
: base(row, command, statementType, tableMapping) { }
|
||||
|
||||
new public SqlCommand Command { get { throw null; } }
|
||||
}
|
||||
public delegate void SqlRowUpdatedEventHandler(object sender, SqlRowUpdatedEventArgs e);
|
||||
public sealed partial class SqlRowUpdatingEventArgs : System.Data.Common.RowUpdatingEventArgs
|
||||
{
|
||||
public SqlRowUpdatingEventArgs(System.Data.DataRow row, System.Data.IDbCommand command, System.Data.StatementType statementType, System.Data.Common.DataTableMapping tableMapping)
|
||||
: base(row, command, statementType, tableMapping) { }
|
||||
|
||||
new public SqlCommand Command { get { throw null; } set { } }
|
||||
protected override System.Data.IDbCommand BaseCommand { get { throw null; } set { } }
|
||||
}
|
||||
public delegate void SqlRowUpdatingEventHandler(object sender, SqlRowUpdatingEventArgs e);
|
||||
public partial class SqlDataReader : System.Data.Common.DbDataReader, System.IDisposable
|
||||
{
|
||||
internal SqlDataReader() { }
|
||||
protected Microsoft.Data.SqlClient.SqlConnection Connection { get { throw null; } }
|
||||
public override int Depth { get { throw null; } }
|
||||
public override int FieldCount { get { throw null; } }
|
||||
public override bool HasRows { get { throw null; } }
|
||||
public override bool IsClosed { get { throw null; } }
|
||||
public override object this[int i] { get { throw null; } }
|
||||
public override object this[string name] { get { throw null; } }
|
||||
public override int RecordsAffected { get { throw null; } }
|
||||
public Microsoft.Data.SqlClient.DataClassification.SensitivityClassification SensitivityClassification { get { throw null; } }
|
||||
public override int VisibleFieldCount { get { throw null; } }
|
||||
public override bool GetBoolean(int i) { throw null; }
|
||||
public override byte GetByte(int i) { throw null; }
|
||||
public override long GetBytes(int i, long dataIndex, byte[] buffer, int bufferIndex, int length) { throw null; }
|
||||
public override char GetChar(int i) { throw null; }
|
||||
public override long GetChars(int i, long dataIndex, char[] buffer, int bufferIndex, int length) { throw null; }
|
||||
public override string GetDataTypeName(int i) { throw null; }
|
||||
public override System.DateTime GetDateTime(int i) { throw null; }
|
||||
public virtual System.DateTimeOffset GetDateTimeOffset(int i) { throw null; }
|
||||
public override decimal GetDecimal(int i) { throw null; }
|
||||
public override double GetDouble(int i) { throw null; }
|
||||
public override System.Collections.IEnumerator GetEnumerator() { throw null; }
|
||||
public override System.Type GetFieldType(int i) { throw null; }
|
||||
public override T GetFieldValue<T>(int i) { throw null; }
|
||||
public override System.Threading.Tasks.Task<T> GetFieldValueAsync<T>(int i, System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public override float GetFloat(int i) { throw null; }
|
||||
public override System.Guid GetGuid(int i) { throw null; }
|
||||
public override short GetInt16(int i) { throw null; }
|
||||
public override int GetInt32(int i) { throw null; }
|
||||
public override long GetInt64(int i) { throw null; }
|
||||
public override string GetName(int i) { throw null; }
|
||||
public override int GetOrdinal(string name) { throw null; }
|
||||
public override System.Type GetProviderSpecificFieldType(int i) { throw null; }
|
||||
public override object GetProviderSpecificValue(int i) { throw null; }
|
||||
public override int GetProviderSpecificValues(object[] values) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlBinary GetSqlBinary(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlBoolean GetSqlBoolean(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlByte GetSqlByte(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlBytes GetSqlBytes(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlChars GetSqlChars(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlDateTime GetSqlDateTime(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlDecimal GetSqlDecimal(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlDouble GetSqlDouble(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlGuid GetSqlGuid(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlInt16 GetSqlInt16(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlInt32 GetSqlInt32(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlInt64 GetSqlInt64(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlMoney GetSqlMoney(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlSingle GetSqlSingle(int i) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlString GetSqlString(int i) { throw null; }
|
||||
public virtual object GetSqlValue(int i) { throw null; }
|
||||
public virtual int GetSqlValues(object[] values) { throw null; }
|
||||
public virtual System.Data.SqlTypes.SqlXml GetSqlXml(int i) { throw null; }
|
||||
public override System.Data.DataTable GetSchemaTable() { throw null; }
|
||||
public override System.IO.Stream GetStream(int i) { throw null; }
|
||||
public override string GetString(int i) { throw null; }
|
||||
public override System.IO.TextReader GetTextReader(int i) { throw null; }
|
||||
public virtual System.TimeSpan GetTimeSpan(int i) { throw null; }
|
||||
public override object GetValue(int i) { throw null; }
|
||||
public override int GetValues(object[] values) { throw null; }
|
||||
public virtual System.Xml.XmlReader GetXmlReader(int i) { throw null; }
|
||||
public override bool IsDBNull(int i) { throw null; }
|
||||
protected internal bool IsCommandBehavior(System.Data.CommandBehavior condition) { throw null; }
|
||||
public override System.Threading.Tasks.Task<bool> IsDBNullAsync(int i, System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public override bool NextResult() { throw null; }
|
||||
public override System.Threading.Tasks.Task<bool> NextResultAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
public override bool Read() { throw null; }
|
||||
public override System.Threading.Tasks.Task<bool> ReadAsync(System.Threading.CancellationToken cancellationToken) { throw null; }
|
||||
}
|
||||
public sealed partial class SqlError
|
||||
{
|
||||
internal SqlError() { }
|
||||
public byte Class { get { throw null; } }
|
||||
public int LineNumber { get { throw null; } }
|
||||
public string Message { get { throw null; } }
|
||||
public int Number { get { throw null; } }
|
||||
public string Procedure { get { throw null; } }
|
||||
public string Server { get { throw null; } }
|
||||
public string Source { get { throw null; } }
|
||||
public byte State { get { throw null; } }
|
||||
public override string ToString() { throw null; }
|
||||
}
|
||||
public sealed partial class SqlErrorCollection : System.Collections.ICollection, System.Collections.IEnumerable
|
||||
{
|
||||
internal SqlErrorCollection() { }
|
||||
public int Count { get { throw null; } }
|
||||
public Microsoft.Data.SqlClient.SqlError this[int index] { get { throw null; } }
|
||||
bool System.Collections.ICollection.IsSynchronized { get { throw null; } }
|
||||
object System.Collections.ICollection.SyncRoot { get { throw null; } }
|
||||
public void CopyTo(System.Array array, int index) { }
|
||||
public void CopyTo(Microsoft.Data.SqlClient.SqlError[] array, int index) { }
|
||||
public System.Collections.IEnumerator GetEnumerator() { throw null; }
|
||||
}
|
||||
public sealed partial class SqlException : System.Data.Common.DbException
|
||||
{
|
||||
internal SqlException() { }
|
||||
public byte Class { get { throw null; } }
|
||||
public System.Guid ClientConnectionId { get { throw null; } }
|
||||
public Microsoft.Data.SqlClient.SqlErrorCollection Errors { get { throw null; } }
|
||||
public int LineNumber { get { throw null; } }
|
||||
public int Number { get { throw null; } }
|
||||
public string Procedure { get { throw null; } }
|
||||
public string Server { get { throw null; } }
|
||||
public override string Source { get { throw null; } }
|
||||
public byte State { get { throw null; } }
|
||||
public override void GetObjectData(System.Runtime.Serialization.SerializationInfo si, System.Runtime.Serialization.StreamingContext context) { }
|
||||
public override string ToString() { throw null; }
|
||||
}
|
||||
public sealed partial class SqlInfoMessageEventArgs : System.EventArgs
|
||||
{
|
||||
internal SqlInfoMessageEventArgs() { }
|
||||
public Microsoft.Data.SqlClient.SqlErrorCollection Errors { get { throw null; } }
|
||||
public string Message { get { throw null; } }
|
||||
public string Source { get { throw null; } }
|
||||
public override string ToString() { throw null; }
|
||||
}
|
||||
public delegate void SqlInfoMessageEventHandler(object sender, Microsoft.Data.SqlClient.SqlInfoMessageEventArgs e);
|
||||
public sealed partial class SqlParameter : System.Data.Common.DbParameter, System.ICloneable, System.Data.IDataParameter, System.Data.IDbDataParameter
|
||||
{
|
||||
public SqlParameter() { }
|
||||
public SqlParameter(string parameterName, System.Data.SqlDbType dbType) { }
|
||||
public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size) { }
|
||||
public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size, string sourceColumn) { }
|
||||
public SqlParameter(string parameterName, object value) { }
|
||||
public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size, System.Data.ParameterDirection direction, bool isNullable, byte precision, byte scale, string sourceColumn, System.Data.DataRowVersion sourceVersion, object value) { }
|
||||
public SqlParameter(string parameterName, System.Data.SqlDbType dbType, int size, System.Data.ParameterDirection direction, byte precision, byte scale, string sourceColumn, System.Data.DataRowVersion sourceVersion, bool sourceColumnNullMapping, object value, string xmlSchemaCollectionDatabase, string xmlSchemaCollectionOwningSchema, string xmlSchemaCollectionName) { }
|
||||
object System.ICloneable.Clone() { throw null; }
|
||||
public System.Data.SqlTypes.SqlCompareOptions CompareInfo { get { throw null; } set { } }
|
||||
public override System.Data.DbType DbType { get { throw null; } set { } }
|
||||
public override System.Data.ParameterDirection Direction { get { throw null; } set { } }
|
||||
public override bool IsNullable { get { throw null; } set { } }
|
||||
public int LocaleId { get { throw null; } set { } }
|
||||
public int Offset { get { throw null; } set { } }
|
||||
public override string ParameterName { get { throw null; } set { } }
|
||||
public new byte Precision { get { throw null; } set { } }
|
||||
public new byte Scale { get { throw null; } set { } }
|
||||
public override int Size { get { throw null; } set { } }
|
||||
public override string SourceColumn { get { throw null; } set { } }
|
||||
public override bool SourceColumnNullMapping { get { throw null; } set { } }
|
||||
public override System.Data.DataRowVersion SourceVersion { get { throw null; } set { } }
|
||||
public System.Data.SqlDbType SqlDbType { get { throw null; } set { } }
|
||||
public object SqlValue { get { throw null; } set { } }
|
||||
public string UdtTypeName { get { throw null; } set { } }
|
||||
public string TypeName { get { throw null; } set { } }
|
||||
public override object Value { get { throw null; } set { } }
|
||||
public string XmlSchemaCollectionDatabase { get { throw null; } set { } }
|
||||
public string XmlSchemaCollectionName { get { throw null; } set { } }
|
||||
public string XmlSchemaCollectionOwningSchema { get { throw null; } set { } }
|
||||
public override void ResetDbType() { }
|
||||
public void ResetSqlDbType() { }
|
||||
public override string ToString() { throw null; }
|
||||
}
|
||||
public sealed partial class SqlParameterCollection : System.Data.Common.DbParameterCollection
|
||||
{
|
||||
internal SqlParameterCollection() { }
|
||||
public override int Count { get { throw null; } }
|
||||
public override bool IsFixedSize { get { throw null; } }
|
||||
public override bool IsReadOnly { get { throw null; } }
|
||||
public new Microsoft.Data.SqlClient.SqlParameter this[int index] { get { throw null; } set { } }
|
||||
public new Microsoft.Data.SqlClient.SqlParameter this[string parameterName] { get { throw null; } set { } }
|
||||
public override object SyncRoot { get { throw null; } }
|
||||
public Microsoft.Data.SqlClient.SqlParameter Add(Microsoft.Data.SqlClient.SqlParameter value) { throw null; }
|
||||
public override int Add(object value) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlParameter Add(string parameterName, System.Data.SqlDbType sqlDbType) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlParameter Add(string parameterName, System.Data.SqlDbType sqlDbType, int size) { throw null; }
|
||||
public Microsoft.Data.SqlClient.SqlParameter Add(string parameterName, System.Data.SqlDbType sqlDbType, int size, string sourceColumn) { throw null; }
|
||||
public override void AddRange(System.Array values) { }
|
||||
public void AddRange(Microsoft.Data.SqlClient.SqlParameter[] values) { }
|
||||
public Microsoft.Data.SqlClient.SqlParameter AddWithValue(string parameterName, object value) { throw null; }
|
||||
public override void Clear() { }
|
||||
public bool Contains(Microsoft.Data.SqlClient.SqlParameter value) { throw null; }
|
||||
public override bool Contains(object value) { throw null; }
|
||||
public override bool Contains(string value) { throw null; }
|
||||
public override void CopyTo(System.Array array, int index) { }
|
||||
public void CopyTo(Microsoft.Data.SqlClient.SqlParameter[] array, int index) { }
|
||||
public override System.Collections.IEnumerator GetEnumerator() { throw null; }
|
||||
protected override System.Data.Common.DbParameter GetParameter(int index) { throw null; }
|
||||
protected override System.Data.Common.DbParameter GetParameter(string parameterName) { throw null; }
|
||||
public int IndexOf(Microsoft.Data.SqlClient.SqlParameter value) { throw null; }
|
||||
public override int IndexOf(object value) { throw null; }
|
||||
public override int IndexOf(string parameterName) { throw null; }
|
||||
public void Insert(int index, Microsoft.Data.SqlClient.SqlParameter value) { }
|
||||
public override void Insert(int index, object value) { }
|
||||
public void Remove(Microsoft.Data.SqlClient.SqlParameter value) { }
|
||||
public override void Remove(object value) { }
|
||||
public override void RemoveAt(int index) { }
|
||||
public override void RemoveAt(string parameterName) { }
|
||||
protected override void SetParameter(int index, System.Data.Common.DbParameter value) { }
|
||||
protected override void SetParameter(string parameterName, System.Data.Common.DbParameter value) { }
|
||||
}
|
||||
public partial class SqlRowsCopiedEventArgs : System.EventArgs
|
||||
{
|
||||
public SqlRowsCopiedEventArgs(long rowsCopied) { }
|
||||
public bool Abort { get { throw null; } set { } }
|
||||
public long RowsCopied { get { throw null; } }
|
||||
}
|
||||
public delegate void SqlRowsCopiedEventHandler(object sender, Microsoft.Data.SqlClient.SqlRowsCopiedEventArgs e);
|
||||
public sealed partial class SqlTransaction : System.Data.Common.DbTransaction
|
||||
{
|
||||
internal SqlTransaction() { }
|
||||
public new Microsoft.Data.SqlClient.SqlConnection Connection { get { throw null; } }
|
||||
protected override System.Data.Common.DbConnection DbConnection { get { throw null; } }
|
||||
public override System.Data.IsolationLevel IsolationLevel { get { throw null; } }
|
||||
public override void Commit() { }
|
||||
protected override void Dispose(bool disposing) { }
|
||||
public override void Rollback() { }
|
||||
public void Rollback(string transactionName) { }
|
||||
public void Save(string savePointName) { }
|
||||
}
|
||||
|
||||
public sealed class SqlCredential
|
||||
{
|
||||
public SqlCredential(string userId, System.Security.SecureString password) { }
|
||||
public string UserId { get { throw null; } }
|
||||
public System.Security.SecureString Password { get { throw null; } }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.Data.SqlClient.DataClassification
|
||||
{
|
||||
public partial class ColumnSensitivity
|
||||
{
|
||||
public ColumnSensitivity(System.Collections.Generic.IList<Microsoft.Data.SqlClient.DataClassification.SensitivityProperty> sensitivityProperties) { }
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.SensitivityProperty> SensitivityProperties { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public partial class InformationType
|
||||
{
|
||||
public InformationType(string name, string id) { }
|
||||
public string Id { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Name { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public partial class Label
|
||||
{
|
||||
public Label(string name, string id) { }
|
||||
public string Id { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public string Name { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public partial class SensitivityClassification
|
||||
{
|
||||
public SensitivityClassification(System.Collections.Generic.IList<Microsoft.Data.SqlClient.DataClassification.Label> labels, System.Collections.Generic.IList<Microsoft.Data.SqlClient.DataClassification.InformationType> informationTypes, System.Collections.Generic.IList<Microsoft.Data.SqlClient.DataClassification.ColumnSensitivity> columnSensitivity) { }
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.ColumnSensitivity> ColumnSensitivities { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.InformationType> InformationTypes { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public System.Collections.ObjectModel.ReadOnlyCollection<Microsoft.Data.SqlClient.DataClassification.Label> Labels { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
public partial class SensitivityProperty
|
||||
{
|
||||
public SensitivityProperty(Microsoft.Data.SqlClient.DataClassification.Label label, Microsoft.Data.SqlClient.DataClassification.InformationType informationType) { }
|
||||
public Microsoft.Data.SqlClient.DataClassification.InformationType InformationType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
public Microsoft.Data.SqlClient.DataClassification.Label Label { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
|
||||
}
|
||||
}
|
||||
namespace Microsoft.Data
|
||||
{
|
||||
public sealed partial class OperationAbortedException : System.SystemException
|
||||
{
|
||||
internal OperationAbortedException() { }
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
||||
<TargetFrameworks>netcoreapp2.1;netstandard2.0</TargetFrameworks>
|
||||
<IntermediateOutputPath>$(ObjFolder)$(Configuration)\$(AssemblyName)\ref\</IntermediateOutputPath>
|
||||
<OutputPath>$(BinFolder)$(Configuration)\$(AssemblyName)\ref\</OutputPath>
|
||||
<Product>Core $(BaseProduct)</Product>
|
||||
<Configurations>Debug;Release;netcoreapp2.1-Debug;netcoreapp2.1-Release</Configurations>
|
||||
<Platforms>AnyCPU;x64;x86</Platforms>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Microsoft.Data.SqlClient.cs" />
|
||||
<Compile Include="Microsoft.Data.SqlClient.Manual.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp2.1'">
|
||||
<Compile Include="Microsoft.Data.SqlClient.NetCoreApp.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'netcoreapp2.1'">
|
||||
<PackageReference Include="System.Security.Cryptography.Cng" Version="4.5.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,25 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 15
|
||||
VisualStudioVersion = 15.0.26430.13
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Common.Tests", "tests\Common.Tests.csproj", "{C72FD34C-539A-4447-9796-62A229571199}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{C72FD34C-539A-4447-9796-62A229571199}.Debug|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Debug|Any CPU
|
||||
{C72FD34C-539A-4447-9796-62A229571199}.Debug|Any CPU.Build.0 = netcoreapp-Windows_NT-Debug|Any CPU
|
||||
{C72FD34C-539A-4447-9796-62A229571199}.Release|Any CPU.ActiveCfg = netcoreapp-Windows_NT-Release|Any CPU
|
||||
{C72FD34C-539A-4447-9796-62A229571199}.Release|Any CPU.Build.0 = netcoreapp-Windows_NT-Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {5E554AE7-CBC2-4C34-9FEA-1A6250CE5D3F}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -0,0 +1,5 @@
|
|||
// 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.
|
||||
|
||||
[assembly: System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
|
|
@ -0,0 +1,9 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<BuildConfigurations>
|
||||
netstandard1.3;
|
||||
netstandard;
|
||||
</BuildConfigurations>
|
||||
</PropertyGroup>
|
||||
</Project>
|
|
@ -0,0 +1,46 @@
|
|||
// 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.IO;
|
||||
using System.Reflection;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.Xunit.Performance.Api;
|
||||
|
||||
public class PerfHarness
|
||||
{
|
||||
public static int Main(string[] args)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (XunitPerformanceHarness harness = new XunitPerformanceHarness(args))
|
||||
{
|
||||
foreach(var testName in GetTestAssemblies())
|
||||
{
|
||||
harness.RunBenchmarks(GetTestAssembly(testName));
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("[ERROR] Benchmark execution failed.");
|
||||
Console.WriteLine($" {ex.ToString()}");
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetTestAssembly(string testName)
|
||||
{
|
||||
// Assume test assemblies are colocated/restored next to the PerfHarness.
|
||||
return Path.Combine(
|
||||
Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), testName);
|
||||
}
|
||||
|
||||
private static IEnumerable<string> GetTestAssemblies()
|
||||
{
|
||||
return Directory.EnumerateFiles(".", "*.Performance.Tests.dll");
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<ProjectGuid>{F5E941C8-AF2F-47AB-A066-FF25470CE382}</ProjectGuid>
|
||||
<OutputType>Exe</OutputType>
|
||||
<RootNamespace>PerfRunner</RootNamespace>
|
||||
<AssemblyName>PerfRunner</AssemblyName>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<CopyNuGetImplementations>false</CopyNuGetImplementations>
|
||||
<NoWarn>0436</NoWarn>
|
||||
<IsTestProject>true</IsTestProject>
|
||||
<Configurations>netstandard-Debug;netstandard-Release;netstandard1.3-Debug;netstandard1.3-Release</Configurations>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="PerfRunner.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="'$(TargetGroup)' != 'net46'">
|
||||
<Compile Include="AssemblyAttributes.cs" />
|
||||
<Compile Include="$(CommonPath)\System\Diagnostics\CodeAnalysis\ExcludeFromCodeCoverageAttribute.cs">
|
||||
<Link>Common\System\Diagnostics\CodeAnalysis\ExcludeFromCodeCoverageAttribute.cs</Link>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Content Include="PerfRunner.runtimeconfig.json">
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"runtimeOptions": {
|
||||
"framework": {
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "9.9.9"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,209 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
/// <summary>Common Unix errno error codes.</summary>
|
||||
internal enum Error
|
||||
{
|
||||
// These values were defined in src/Native/System.Native/fxerrno.h
|
||||
//
|
||||
// They compare against values obtained via Interop.Sys.GetLastError() not Marshal.GetLastWin32Error()
|
||||
// which obtains the raw errno that varies between unixes. The strong typing as an enum is meant to
|
||||
// prevent confusing the two. Casting to or from int is suspect. Use GetLastErrorInfo() if you need to
|
||||
// correlate these to the underlying platform values or obtain the corresponding error message.
|
||||
//
|
||||
|
||||
SUCCESS = 0,
|
||||
|
||||
E2BIG = 0x10001, // Argument list too long.
|
||||
EACCES = 0x10002, // Permission denied.
|
||||
EADDRINUSE = 0x10003, // Address in use.
|
||||
EADDRNOTAVAIL = 0x10004, // Address not available.
|
||||
EAFNOSUPPORT = 0x10005, // Address family not supported.
|
||||
EAGAIN = 0x10006, // Resource unavailable, try again (same value as EWOULDBLOCK),
|
||||
EALREADY = 0x10007, // Connection already in progress.
|
||||
EBADF = 0x10008, // Bad file descriptor.
|
||||
EBADMSG = 0x10009, // Bad message.
|
||||
EBUSY = 0x1000A, // Device or resource busy.
|
||||
ECANCELED = 0x1000B, // Operation canceled.
|
||||
ECHILD = 0x1000C, // No child processes.
|
||||
ECONNABORTED = 0x1000D, // Connection aborted.
|
||||
ECONNREFUSED = 0x1000E, // Connection refused.
|
||||
ECONNRESET = 0x1000F, // Connection reset.
|
||||
EDEADLK = 0x10010, // Resource deadlock would occur.
|
||||
EDESTADDRREQ = 0x10011, // Destination address required.
|
||||
EDOM = 0x10012, // Mathematics argument out of domain of function.
|
||||
EDQUOT = 0x10013, // Reserved.
|
||||
EEXIST = 0x10014, // File exists.
|
||||
EFAULT = 0x10015, // Bad address.
|
||||
EFBIG = 0x10016, // File too large.
|
||||
EHOSTUNREACH = 0x10017, // Host is unreachable.
|
||||
EIDRM = 0x10018, // Identifier removed.
|
||||
EILSEQ = 0x10019, // Illegal byte sequence.
|
||||
EINPROGRESS = 0x1001A, // Operation in progress.
|
||||
EINTR = 0x1001B, // Interrupted function.
|
||||
EINVAL = 0x1001C, // Invalid argument.
|
||||
EIO = 0x1001D, // I/O error.
|
||||
EISCONN = 0x1001E, // Socket is connected.
|
||||
EISDIR = 0x1001F, // Is a directory.
|
||||
ELOOP = 0x10020, // Too many levels of symbolic links.
|
||||
EMFILE = 0x10021, // File descriptor value too large.
|
||||
EMLINK = 0x10022, // Too many links.
|
||||
EMSGSIZE = 0x10023, // Message too large.
|
||||
EMULTIHOP = 0x10024, // Reserved.
|
||||
ENAMETOOLONG = 0x10025, // Filename too long.
|
||||
ENETDOWN = 0x10026, // Network is down.
|
||||
ENETRESET = 0x10027, // Connection aborted by network.
|
||||
ENETUNREACH = 0x10028, // Network unreachable.
|
||||
ENFILE = 0x10029, // Too many files open in system.
|
||||
ENOBUFS = 0x1002A, // No buffer space available.
|
||||
ENODEV = 0x1002C, // No such device.
|
||||
ENOENT = 0x1002D, // No such file or directory.
|
||||
ENOEXEC = 0x1002E, // Executable file format error.
|
||||
ENOLCK = 0x1002F, // No locks available.
|
||||
ENOLINK = 0x10030, // Reserved.
|
||||
ENOMEM = 0x10031, // Not enough space.
|
||||
ENOMSG = 0x10032, // No message of the desired type.
|
||||
ENOPROTOOPT = 0x10033, // Protocol not available.
|
||||
ENOSPC = 0x10034, // No space left on device.
|
||||
ENOSYS = 0x10037, // Function not supported.
|
||||
ENOTCONN = 0x10038, // The socket is not connected.
|
||||
ENOTDIR = 0x10039, // Not a directory or a symbolic link to a directory.
|
||||
ENOTEMPTY = 0x1003A, // Directory not empty.
|
||||
ENOTRECOVERABLE = 0x1003B, // State not recoverable.
|
||||
ENOTSOCK = 0x1003C, // Not a socket.
|
||||
ENOTSUP = 0x1003D, // Not supported (same value as EOPNOTSUP).
|
||||
ENOTTY = 0x1003E, // Inappropriate I/O control operation.
|
||||
ENXIO = 0x1003F, // No such device or address.
|
||||
EOVERFLOW = 0x10040, // Value too large to be stored in data type.
|
||||
EOWNERDEAD = 0x10041, // Previous owner died.
|
||||
EPERM = 0x10042, // Operation not permitted.
|
||||
EPIPE = 0x10043, // Broken pipe.
|
||||
EPROTO = 0x10044, // Protocol error.
|
||||
EPROTONOSUPPORT = 0x10045, // Protocol not supported.
|
||||
EPROTOTYPE = 0x10046, // Protocol wrong type for socket.
|
||||
ERANGE = 0x10047, // Result too large.
|
||||
EROFS = 0x10048, // Read-only file system.
|
||||
ESPIPE = 0x10049, // Invalid seek.
|
||||
ESRCH = 0x1004A, // No such process.
|
||||
ESTALE = 0x1004B, // Reserved.
|
||||
ETIMEDOUT = 0x1004D, // Connection timed out.
|
||||
ETXTBSY = 0x1004E, // Text file busy.
|
||||
EXDEV = 0x1004F, // Cross-device link.
|
||||
ESOCKTNOSUPPORT = 0x1005E, // Socket type not supported.
|
||||
EPFNOSUPPORT = 0x10060, // Protocol family not supported.
|
||||
ESHUTDOWN = 0x1006C, // Socket shutdown.
|
||||
EHOSTDOWN = 0x10070, // Host is down.
|
||||
ENODATA = 0x10071, // No data available.
|
||||
|
||||
// POSIX permits these to have the same value and we make them always equal so
|
||||
// that CoreFX cannot introduce a dependency on distinguishing between them that
|
||||
// would not work on all platforms.
|
||||
EOPNOTSUPP = ENOTSUP, // Operation not supported on socket.
|
||||
EWOULDBLOCK = EAGAIN, // Operation would block.
|
||||
}
|
||||
|
||||
|
||||
// Represents a platform-agnostic Error and underlying platform-specific errno
|
||||
internal struct ErrorInfo
|
||||
{
|
||||
private Error _error;
|
||||
private int _rawErrno;
|
||||
|
||||
internal ErrorInfo(int errno)
|
||||
{
|
||||
_error = Interop.Sys.ConvertErrorPlatformToPal(errno);
|
||||
_rawErrno = errno;
|
||||
}
|
||||
|
||||
internal ErrorInfo(Error error)
|
||||
{
|
||||
_error = error;
|
||||
_rawErrno = -1;
|
||||
}
|
||||
|
||||
internal Error Error
|
||||
{
|
||||
get { return _error; }
|
||||
}
|
||||
|
||||
internal int RawErrno
|
||||
{
|
||||
get { return _rawErrno == -1 ? (_rawErrno = Interop.Sys.ConvertErrorPalToPlatform(_error)) : _rawErrno; }
|
||||
}
|
||||
|
||||
internal string GetErrorMessage()
|
||||
{
|
||||
return Interop.Sys.StrError(RawErrno);
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return string.Format(
|
||||
"RawErrno: {0} Error: {1} GetErrorMessage: {2}", // No localization required; text is member names used for debugging purposes
|
||||
RawErrno, Error, GetErrorMessage());
|
||||
}
|
||||
}
|
||||
|
||||
internal partial class Sys
|
||||
{
|
||||
internal static Error GetLastError()
|
||||
{
|
||||
return ConvertErrorPlatformToPal(Marshal.GetLastWin32Error());
|
||||
}
|
||||
|
||||
internal static ErrorInfo GetLastErrorInfo()
|
||||
{
|
||||
return new ErrorInfo(Marshal.GetLastWin32Error());
|
||||
}
|
||||
|
||||
internal static unsafe string StrError(int platformErrno)
|
||||
{
|
||||
int maxBufferLength = 1024; // should be long enough for most any UNIX error
|
||||
byte* buffer = stackalloc byte[maxBufferLength];
|
||||
byte* message = StrErrorR(platformErrno, buffer, maxBufferLength);
|
||||
|
||||
if (message == null)
|
||||
{
|
||||
// This means the buffer was not large enough, but still contains
|
||||
// as much of the error message as possible and is guaranteed to
|
||||
// be null-terminated. We're not currently resizing/retrying because
|
||||
// maxBufferLength is large enough in practice, but we could do
|
||||
// so here in the future if necessary.
|
||||
message = buffer;
|
||||
}
|
||||
|
||||
return Marshal.PtrToStringAnsi((IntPtr)message);
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_ConvertErrorPlatformToPal")]
|
||||
internal static extern Error ConvertErrorPlatformToPal(int platformErrno);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_ConvertErrorPalToPlatform")]
|
||||
internal static extern int ConvertErrorPalToPlatform(Error error);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_StrErrorR")]
|
||||
private static extern unsafe byte* StrErrorR(int platformErrno, byte* buffer, int bufferSize);
|
||||
}
|
||||
}
|
||||
|
||||
// NOTE: extension method can't be nested inside Interop class.
|
||||
internal static class InteropErrorExtensions
|
||||
{
|
||||
// Intended usage is e.g. Interop.Error.EFAIL.Info() for brevity
|
||||
// vs. new Interop.ErrorInfo(Interop.Error.EFAIL) for synthesizing
|
||||
// errors. Errors originated from the system should be obtained
|
||||
// via GetLastErrorInfo(), not GetLastError().Info() as that will
|
||||
// convert twice, which is not only inefficient but also lossy if
|
||||
// we ever encounter a raw errno that no equivalent in the Error
|
||||
// enum.
|
||||
public static Interop.ErrorInfo Info(this Interop.Error error)
|
||||
{
|
||||
return new Interop.ErrorInfo(error);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,172 @@
|
|||
// 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.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
private static void ThrowExceptionForIoErrno(ErrorInfo errorInfo, string path, bool isDirectory, Func<ErrorInfo, ErrorInfo> errorRewriter)
|
||||
{
|
||||
Debug.Assert(errorInfo.Error != Error.SUCCESS);
|
||||
Debug.Assert(errorInfo.Error != Error.EINTR, "EINTR errors should be handled by the native shim and never bubble up to managed code");
|
||||
|
||||
if (errorRewriter != null)
|
||||
{
|
||||
errorInfo = errorRewriter(errorInfo);
|
||||
}
|
||||
|
||||
throw Interop.GetExceptionForIoErrno(errorInfo, path, isDirectory);
|
||||
}
|
||||
|
||||
internal static void CheckIo(Error error, string path = null, bool isDirectory = false, Func<ErrorInfo, ErrorInfo> errorRewriter = null)
|
||||
{
|
||||
if (error != Interop.Error.SUCCESS)
|
||||
{
|
||||
ThrowExceptionForIoErrno(error.Info(), path, isDirectory, errorRewriter);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validates the result of system call that returns greater than or equal to 0 on success
|
||||
/// and less than 0 on failure, with errno set to the error code.
|
||||
/// If the system call failed for any reason, an exception is thrown. Otherwise, the system call succeeded.
|
||||
/// </summary>
|
||||
/// <param name="result">The result of the system call.</param>
|
||||
/// <param name="path">The path with which this error is associated. This may be null.</param>
|
||||
/// <param name="isDirectory">true if the <paramref name="path"/> is known to be a directory; otherwise, false.</param>
|
||||
/// <param name="errorRewriter">Optional function to change an error code prior to processing it.</param>
|
||||
/// <returns>
|
||||
/// On success, returns the non-negative result long that was validated.
|
||||
/// </returns>
|
||||
internal static long CheckIo(long result, string path = null, bool isDirectory = false, Func<ErrorInfo, ErrorInfo> errorRewriter = null)
|
||||
{
|
||||
if (result < 0)
|
||||
{
|
||||
ThrowExceptionForIoErrno(Sys.GetLastErrorInfo(), path, isDirectory, errorRewriter);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validates the result of system call that returns greater than or equal to 0 on success
|
||||
/// and less than 0 on failure, with errno set to the error code.
|
||||
/// If the system call failed for any reason, an exception is thrown. Otherwise, the system call succeeded.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// On success, returns the non-negative result int that was validated.
|
||||
/// </returns>
|
||||
internal static int CheckIo(int result, string path = null, bool isDirectory = false, Func<ErrorInfo, ErrorInfo> errorRewriter = null)
|
||||
{
|
||||
CheckIo((long)result, path, isDirectory, errorRewriter);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validates the result of system call that returns greater than or equal to 0 on success
|
||||
/// and less than 0 on failure, with errno set to the error code.
|
||||
/// If the system call failed for any reason, an exception is thrown. Otherwise, the system call succeeded.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// On success, returns the non-negative result IntPtr that was validated.
|
||||
/// </returns>
|
||||
internal static IntPtr CheckIo(IntPtr result, string path = null, bool isDirectory = false, Func<ErrorInfo, ErrorInfo> errorRewriter = null)
|
||||
{
|
||||
CheckIo((long)result, path, isDirectory, errorRewriter);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Validates the result of system call that returns greater than or equal to 0 on success
|
||||
/// and less than 0 on failure, with errno set to the error code.
|
||||
/// If the system call failed for any reason, an exception is thrown. Otherwise, the system call succeeded.
|
||||
/// </summary>
|
||||
/// <returns>
|
||||
/// On success, returns the valid SafeFileHandle that was validated.
|
||||
/// </returns>
|
||||
internal static TSafeHandle CheckIo<TSafeHandle>(TSafeHandle handle, string path = null, bool isDirectory = false, Func<ErrorInfo, ErrorInfo> errorRewriter = null)
|
||||
where TSafeHandle : SafeHandle
|
||||
{
|
||||
if (handle.IsInvalid)
|
||||
{
|
||||
ThrowExceptionForIoErrno(Sys.GetLastErrorInfo(), path, isDirectory, errorRewriter);
|
||||
}
|
||||
|
||||
return handle;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets an Exception to represent the supplied error info.
|
||||
/// </summary>
|
||||
/// <param name="error">The error info</param>
|
||||
/// <param name="path">The path with which this error is associated. This may be null.</param>
|
||||
/// <param name="isDirectory">true if the <paramref name="path"/> is known to be a directory; otherwise, false.</param>
|
||||
/// <returns></returns>
|
||||
internal static Exception GetExceptionForIoErrno(ErrorInfo errorInfo, string path = null, bool isDirectory = false)
|
||||
{
|
||||
// Translate the errno into a known set of exception types. For cases where multiple errnos map
|
||||
// to the same exception type, include an inner exception with the details.
|
||||
switch (errorInfo.Error)
|
||||
{
|
||||
case Error.ENOENT:
|
||||
if (isDirectory)
|
||||
{
|
||||
return !string.IsNullOrEmpty(path) ?
|
||||
new DirectoryNotFoundException(SR.Format(SR.IO_PathNotFound_Path, path)) :
|
||||
new DirectoryNotFoundException(SR.IO_PathNotFound_NoPathName);
|
||||
}
|
||||
else
|
||||
{
|
||||
return !string.IsNullOrEmpty(path) ?
|
||||
new FileNotFoundException(SR.Format(SR.IO_FileNotFound_FileName, path), path) :
|
||||
new FileNotFoundException(SR.IO_FileNotFound);
|
||||
}
|
||||
|
||||
case Error.EACCES:
|
||||
case Error.EBADF:
|
||||
case Error.EPERM:
|
||||
Exception inner = GetIOException(errorInfo);
|
||||
return !string.IsNullOrEmpty(path) ?
|
||||
new UnauthorizedAccessException(SR.Format(SR.UnauthorizedAccess_IODenied_Path, path), inner) :
|
||||
new UnauthorizedAccessException(SR.UnauthorizedAccess_IODenied_NoPathName, inner);
|
||||
|
||||
case Error.ENAMETOOLONG:
|
||||
return !string.IsNullOrEmpty(path) ?
|
||||
new PathTooLongException(SR.Format(SR.IO_PathTooLong_Path, path)) :
|
||||
new PathTooLongException(SR.IO_PathTooLong);
|
||||
|
||||
case Error.EWOULDBLOCK:
|
||||
return !string.IsNullOrEmpty(path) ?
|
||||
new IOException(SR.Format(SR.IO_SharingViolation_File, path), errorInfo.RawErrno) :
|
||||
new IOException(SR.IO_SharingViolation_NoFileName, errorInfo.RawErrno);
|
||||
|
||||
case Error.ECANCELED:
|
||||
return new OperationCanceledException();
|
||||
|
||||
case Error.EFBIG:
|
||||
return new ArgumentOutOfRangeException("value", SR.ArgumentOutOfRange_FileLengthTooBig);
|
||||
|
||||
case Error.EEXIST:
|
||||
if (!string.IsNullOrEmpty(path))
|
||||
{
|
||||
return new IOException(SR.Format(SR.IO_FileExists_Name, path), errorInfo.RawErrno);
|
||||
}
|
||||
goto default;
|
||||
|
||||
default:
|
||||
return GetIOException(errorInfo);
|
||||
}
|
||||
}
|
||||
|
||||
internal static Exception GetIOException(Interop.ErrorInfo errorInfo)
|
||||
{
|
||||
return new IOException(errorInfo.GetErrorMessage(), errorInfo.RawErrno);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
// 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.
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Libraries
|
||||
{
|
||||
internal const string GlobalizationNative = "System.Globalization.Native";
|
||||
internal const string SystemNative = "System.Native";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
// 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.Globalization;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Globalization
|
||||
{
|
||||
internal delegate void EnumCalendarInfoCallback(
|
||||
[MarshalAs(UnmanagedType.LPWStr)] string calendarString,
|
||||
IntPtr context);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetCalendars")]
|
||||
internal static extern int GetCalendars(string localeName, CalendarId[] calendars, int calendarsCapacity);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetCalendarInfo")]
|
||||
internal static extern ResultCode GetCalendarInfo(string localeName, CalendarId calendarId, CalendarDataType calendarDataType, [Out] StringBuilder result, int resultCapacity);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_EnumCalendarInfo")]
|
||||
internal static extern bool EnumCalendarInfo(EnumCalendarInfoCallback callback, string localeName, CalendarId calendarId, CalendarDataType calendarDataType, IntPtr context);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, EntryPoint = "GlobalizationNative_GetLatestJapaneseEra")]
|
||||
internal static extern int GetLatestJapaneseEra();
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, EntryPoint = "GlobalizationNative_GetJapaneseEraStartDate")]
|
||||
internal static extern bool GetJapaneseEraStartDate(int era, out int startYear, out int startMonth, out int startDay);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using System.Security;
|
||||
using System.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Globalization
|
||||
{
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_ChangeCase")]
|
||||
internal static extern unsafe void ChangeCase(char* src, int srcLen, char* dstBuffer, int dstBufferCapacity, bool bToUpper);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_ChangeCaseInvariant")]
|
||||
internal static extern unsafe void ChangeCaseInvariant(char* src, int srcLen, char* dstBuffer, int dstBufferCapacity, bool bToUpper);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_ChangeCaseTurkish")]
|
||||
internal static extern unsafe void ChangeCaseTurkish(char* src, int srcLen, char* dstBuffer, int dstBufferCapacity, bool bToUpper);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,79 @@
|
|||
// 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.Globalization;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Globalization
|
||||
{
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetSortHandle")]
|
||||
internal static extern unsafe ResultCode GetSortHandle(byte[] localeName, out SafeSortHandle sortHandle);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_CloseSortHandle")]
|
||||
internal static extern unsafe void CloseSortHandle(IntPtr handle);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_CompareString")]
|
||||
internal static extern unsafe int CompareString(SafeSortHandle sortHandle, char* lpStr1, int cwStr1Len, char* lpStr2, int cwStr2Len, CompareOptions options);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_IndexOf")]
|
||||
internal static extern unsafe int IndexOf(SafeSortHandle sortHandle, char* target, int cwTargetLength, char* pSource, int cwSourceLength, CompareOptions options, int* matchLengthPtr);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_LastIndexOf")]
|
||||
internal static extern unsafe int LastIndexOf(SafeSortHandle sortHandle, char* target, int cwTargetLength, char* pSource, int cwSourceLength, CompareOptions options);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_IndexOfOrdinalIgnoreCase")]
|
||||
internal static extern unsafe int IndexOfOrdinalIgnoreCase(string target, int cwTargetLength, char* pSource, int cwSourceLength, bool findLast);
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_IndexOfOrdinalIgnoreCase")]
|
||||
internal static extern unsafe int IndexOfOrdinalIgnoreCase(char* target, int cwTargetLength, char* pSource, int cwSourceLength, bool findLast);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_StartsWith")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool StartsWith(SafeSortHandle sortHandle, char* target, int cwTargetLength, char* source, int cwSourceLength, CompareOptions options);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_EndsWith")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool EndsWith(SafeSortHandle sortHandle, char* target, int cwTargetLength, char* source, int cwSourceLength, CompareOptions options);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_StartsWith")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool StartsWith(SafeSortHandle sortHandle, string target, int cwTargetLength, string source, int cwSourceLength, CompareOptions options);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_EndsWith")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool EndsWith(SafeSortHandle sortHandle, string target, int cwTargetLength, string source, int cwSourceLength, CompareOptions options);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetSortKey")]
|
||||
internal static extern unsafe int GetSortKey(SafeSortHandle sortHandle, string str, int strLength, byte* sortKey, int sortKeyLength, CompareOptions options);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_CompareStringOrdinalIgnoreCase")]
|
||||
internal static extern unsafe int CompareStringOrdinalIgnoreCase(char* lpStr1, int cwStr1Len, char* lpStr2, int cwStr2Len);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, EntryPoint = "GlobalizationNative_GetSortVersion")]
|
||||
internal static extern int GetSortVersion(SafeSortHandle sortHandle);
|
||||
|
||||
internal class SafeSortHandle : SafeHandle
|
||||
{
|
||||
private SafeSortHandle() :
|
||||
base(IntPtr.Zero, true)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvalid
|
||||
{
|
||||
get { return handle == IntPtr.Zero; }
|
||||
}
|
||||
|
||||
protected override bool ReleaseHandle()
|
||||
{
|
||||
CloseSortHandle(handle);
|
||||
SetHandle(IntPtr.Zero);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Globalization
|
||||
{
|
||||
[DllImport(Libraries.GlobalizationNative, EntryPoint = "GlobalizationNative_LoadICU")]
|
||||
internal static extern int LoadICU();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Globalization
|
||||
{
|
||||
internal const int AllowUnassigned = 0x1;
|
||||
internal const int UseStd3AsciiRules = 0x2;
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_ToAscii")]
|
||||
internal static extern unsafe int ToAscii(uint flags, char* src, int srcLen, char* dstBuffer, int dstBufferCapacity);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_ToUnicode")]
|
||||
internal static extern unsafe int ToUnicode(uint flags, char* src, int srcLen, char* dstBuffer, int dstBufferCapacity);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Globalization
|
||||
{
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetLocaleName")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool GetLocaleName(string localeName, [Out] StringBuilder value, int valueLength);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetLocaleInfoString")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool GetLocaleInfoString(string localeName, uint localeStringData, [Out] StringBuilder value, int valueLength);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetDefaultLocaleName")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool GetDefaultLocaleName([Out] StringBuilder value, int valueLength);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetLocaleTimeFormat")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool GetLocaleTimeFormat(string localeName, bool shortFormat, [Out] StringBuilder value, int valueLength);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetLocaleInfoInt")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool GetLocaleInfoInt(string localeName, uint localeNumberData, ref int value);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetLocaleInfoGroupingSizes")]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
internal static extern unsafe bool GetLocaleInfoGroupingSizes(string localeName, uint localeGroupingData, ref int primaryGroupSize, ref int secondaryGroupSize);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetLocales")]
|
||||
internal static extern unsafe int GetLocales([Out] char[] value, int valueLength);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Globalization
|
||||
{
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_IsNormalized")]
|
||||
internal static extern int IsNormalized(NormalizationForm normalizationForm, string src, int srcLen);
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_NormalizeString")]
|
||||
internal static extern int NormalizeString(NormalizationForm normalizationForm, string src, int srcLen, [Out] char[] dstBuffer, int dstBufferCapacity);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
// 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.
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Globalization
|
||||
{
|
||||
// needs to be kept in sync with ResultCode in System.Globalization.Native
|
||||
internal enum ResultCode
|
||||
{
|
||||
Success = 0,
|
||||
UnknownError = 1,
|
||||
InsufficentBuffer = 2,
|
||||
OutOfMemory = 3
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Globalization
|
||||
{
|
||||
// needs to be kept in sync with TimeZoneDisplayNameType in System.Globalization.Native
|
||||
internal enum TimeZoneDisplayNameType
|
||||
{
|
||||
Generic = 0,
|
||||
Standard = 1,
|
||||
DaylightSavings = 2,
|
||||
}
|
||||
|
||||
[DllImport(Libraries.GlobalizationNative, CharSet = CharSet.Unicode, EntryPoint = "GlobalizationNative_GetTimeZoneDisplayName")]
|
||||
internal static extern ResultCode GetTimeZoneDisplayName(
|
||||
string localeName,
|
||||
string timeZoneId,
|
||||
TimeZoneDisplayNameType type,
|
||||
[Out] StringBuilder result,
|
||||
int resultLength);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
// 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.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
/// <summary>
|
||||
/// Helper for making interop calls that return a string, but we don't know
|
||||
/// the correct size of buffer to make. So invoke the interop call with an
|
||||
/// increasing buffer until the size is big enough.
|
||||
/// </summary>
|
||||
internal static bool CallStringMethod<TArg1, TArg2, TArg3>(
|
||||
Func<TArg1, TArg2, TArg3, StringBuilder, Interop.Globalization.ResultCode> interopCall,
|
||||
TArg1 arg1,
|
||||
TArg2 arg2,
|
||||
TArg3 arg3,
|
||||
out string result)
|
||||
{
|
||||
const int initialStringSize = 80;
|
||||
const int maxDoubleAttempts = 5;
|
||||
|
||||
StringBuilder stringBuilder = StringBuilderCache.Acquire(initialStringSize);
|
||||
|
||||
for (int i = 0; i < maxDoubleAttempts; i++)
|
||||
{
|
||||
Interop.Globalization.ResultCode resultCode = interopCall(arg1, arg2, arg3, stringBuilder);
|
||||
|
||||
if (resultCode == Interop.Globalization.ResultCode.Success)
|
||||
{
|
||||
result = StringBuilderCache.GetStringAndRelease(stringBuilder);
|
||||
return true;
|
||||
}
|
||||
else if (resultCode == Interop.Globalization.ResultCode.InsufficentBuffer)
|
||||
{
|
||||
// increase the string size and loop
|
||||
stringBuilder.EnsureCapacity(stringBuilder.Capacity * 2);
|
||||
}
|
||||
else
|
||||
{
|
||||
// if there is an unknown error, don't proceed
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
StringBuilderCache.Release(stringBuilder);
|
||||
result = null;
|
||||
return false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Close", SetLastError = true)]
|
||||
internal static extern int Close(IntPtr fd);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal enum LockOperations : int
|
||||
{
|
||||
LOCK_SH = 1, /* shared lock */
|
||||
LOCK_EX = 2, /* exclusive lock */
|
||||
LOCK_NB = 4, /* don't block when locking*/
|
||||
LOCK_UN = 8, /* unlock */
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FLock", SetLastError = true)]
|
||||
internal static extern int FLock(SafeFileHandle fd, LockOperations operation);
|
||||
|
||||
/// <summary>
|
||||
/// Exposing this for SafeFileHandle.ReleaseHandle() to call.
|
||||
/// Normal callers should use FLock(SafeFileHandle fd).
|
||||
/// </summary>
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FLock", SetLastError = true)]
|
||||
internal static extern int FLock(IntPtr fd, LockOperations operation);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FSync", SetLastError = true)]
|
||||
internal static extern int FSync(SafeFileHandle fd);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FTruncate", SetLastError = true)]
|
||||
internal static extern int FTruncate(SafeFileHandle fd, long length);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
// 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.Buffers;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetCwd", SetLastError = true)]
|
||||
private static extern unsafe byte* GetCwd(byte* buffer, int bufferLength);
|
||||
|
||||
internal static unsafe string GetCwd()
|
||||
{
|
||||
const int StackLimit = 256;
|
||||
|
||||
// First try to get the path into a buffer on the stack
|
||||
byte* stackBuf = stackalloc byte[StackLimit];
|
||||
string result = GetCwdHelper(stackBuf, StackLimit);
|
||||
if (result != null)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
// If that was too small, try increasing large buffer sizes
|
||||
int bufferSize = StackLimit;
|
||||
do
|
||||
{
|
||||
checked { bufferSize *= 2; }
|
||||
byte[] buf = ArrayPool<byte>.Shared.Rent(bufferSize);
|
||||
try
|
||||
{
|
||||
fixed (byte* ptr = &buf[0])
|
||||
{
|
||||
result = GetCwdHelper(ptr, buf.Length);
|
||||
if (result != null)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
ArrayPool<byte>.Shared.Return(buf);
|
||||
}
|
||||
}
|
||||
while (true);
|
||||
}
|
||||
|
||||
private static unsafe string GetCwdHelper(byte* ptr, int bufferSize)
|
||||
{
|
||||
// Call the real getcwd
|
||||
byte* result = GetCwd(ptr, bufferSize);
|
||||
|
||||
// If it returned non-null, the null-terminated path is in the buffer
|
||||
if (result != null)
|
||||
{
|
||||
return Marshal.PtrToStringAnsi((IntPtr)ptr);
|
||||
}
|
||||
|
||||
// Otherwise, if it failed due to the buffer being too small, return null;
|
||||
// for anything else, throw.
|
||||
ErrorInfo errorInfo = Interop.Sys.GetLastErrorInfo();
|
||||
if (errorInfo.Error == Interop.Error.ERANGE)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
throw Interop.GetExceptionForIoErrno(errorInfo);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
// 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.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
internal partial class Interop
|
||||
{
|
||||
internal unsafe partial class Sys
|
||||
{
|
||||
[DllImport(Interop.Libraries.SystemNative, EntryPoint = "SystemNative_GetNonCryptographicallySecureRandomBytes")]
|
||||
internal static extern unsafe void GetNonCryptographicallySecureRandomBytes(byte* buffer, int length);
|
||||
}
|
||||
|
||||
internal static unsafe void GetRandomBytes(byte* buffer, int length)
|
||||
{
|
||||
Sys.GetNonCryptographicallySecureRandomBytes(buffer, length);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal enum SeekWhence
|
||||
{
|
||||
SEEK_SET = 0,
|
||||
SEEK_CUR = 1,
|
||||
SEEK_END = 2
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_LSeek", SetLastError = true)]
|
||||
internal static extern long LSeek(SafeFileHandle fd, long offset, SeekWhence whence);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal enum LockType : short
|
||||
{
|
||||
F_WRLCK = 1, // exclusive or write lock
|
||||
F_UNLCK = 2 // unlock
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_LockFileRegion", SetLastError=true)]
|
||||
internal static extern int LockFileRegion(SafeHandle fd, long offset, long length, LockType lockType);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_MksTemps", SetLastError = true)]
|
||||
internal static extern IntPtr MksTemps(
|
||||
byte[] template,
|
||||
int suffixlen);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Open", SetLastError = true)]
|
||||
internal static extern SafeFileHandle Open(string filename, OpenFlags flags, int mode);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
// 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;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[Flags]
|
||||
internal enum OpenFlags
|
||||
{
|
||||
// Access modes (mutually exclusive)
|
||||
O_RDONLY = 0x0000,
|
||||
O_WRONLY = 0x0001,
|
||||
O_RDWR = 0x0002,
|
||||
|
||||
// Flags (combinable)
|
||||
O_CLOEXEC = 0x0010,
|
||||
O_CREAT = 0x0020,
|
||||
O_EXCL = 0x0040,
|
||||
O_TRUNC = 0x0080,
|
||||
O_SYNC = 0x0100,
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal enum PathConfName : int
|
||||
{
|
||||
PC_LINK_MAX = 1,
|
||||
PC_MAX_CANON = 2,
|
||||
PC_MAX_INPUT = 3,
|
||||
PC_NAME_MAX = 4,
|
||||
PC_PATH_MAX = 5,
|
||||
PC_PIPE_BUF = 6,
|
||||
PC_CHOWN_RESTRICTED = 7,
|
||||
PC_NO_TRUNC = 8,
|
||||
PC_VDISABLE = 9,
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_PathConf", SetLastError = true)]
|
||||
private static extern int PathConf(string path, PathConfName name);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
// 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;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[Flags]
|
||||
internal enum Permissions
|
||||
{
|
||||
Mask = S_IRWXU | S_IRWXG | S_IRWXO,
|
||||
|
||||
S_IRWXU = S_IRUSR | S_IWUSR | S_IXUSR,
|
||||
S_IRUSR = 0x100,
|
||||
S_IWUSR = 0x80,
|
||||
S_IXUSR = 0x40,
|
||||
|
||||
S_IRWXG = S_IRGRP | S_IWGRP | S_IXGRP,
|
||||
S_IRGRP = 0x20,
|
||||
S_IWGRP = 0x10,
|
||||
S_IXGRP = 0x8,
|
||||
|
||||
S_IRWXO = S_IROTH | S_IWOTH | S_IXOTH,
|
||||
S_IROTH = 0x4,
|
||||
S_IWOTH = 0x2,
|
||||
S_IXOTH = 0x1,
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal enum FileAdvice : int
|
||||
{
|
||||
POSIX_FADV_NORMAL = 0, /* no special advice, the default value */
|
||||
POSIX_FADV_RANDOM = 1, /* random I/O access */
|
||||
POSIX_FADV_SEQUENTIAL = 2, /* sequential I/O access */
|
||||
POSIX_FADV_WILLNEED = 3, /* will need specified pages */
|
||||
POSIX_FADV_DONTNEED = 4, /* don't need the specified pages */
|
||||
POSIX_FADV_NOREUSE = 5, /* data will only be accessed once */
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Notifies the OS kernel that the specified file will be accessed in a particular way soon; this allows the kernel to
|
||||
/// potentially optimize the access pattern of the file.
|
||||
/// </summary>
|
||||
/// <param name="fd">The file descriptor of the file</param>
|
||||
/// <param name="offset">The start of the region to advise about</param>
|
||||
/// <param name="length">The number of bytes of the region (until the end of the file if 0)</param>
|
||||
/// <param name="advice">The type of advice to give the kernel about the specified region</param>
|
||||
/// <returns>
|
||||
/// Returns 0 on success; otherwise, the error code is returned
|
||||
/// </returns>
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_PosixFAdvise", SetLastError = false /* this is explicitly called out in the man page */)]
|
||||
internal static extern int PosixFAdvise(SafeFileHandle fd, long offset, long length, FileAdvice advice);
|
||||
}
|
||||
}
|
|
@ -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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
/// <summary>
|
||||
/// Reads a number of bytes from an open file descriptor into a specified buffer.
|
||||
/// </summary>
|
||||
/// <param name="fd">The open file descriptor to try to read from</param>
|
||||
/// <param name="buffer">The buffer to read info into</param>
|
||||
/// <param name="count">The size of the buffer</param>
|
||||
/// <returns>
|
||||
/// Returns the number of bytes read on success; otherwise, -1 is returned
|
||||
/// Note - on fail. the position of the stream may change depending on the platform; consult man 2 read for more info
|
||||
/// </returns>
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Read", SetLastError = true)]
|
||||
internal static extern unsafe int Read(SafeFileHandle fd, byte* buffer, int count);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,102 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
private static readonly int s_readBufferSize = GetReadDirRBufferSize();
|
||||
|
||||
internal enum NodeType : int
|
||||
{
|
||||
DT_UNKNOWN = 0,
|
||||
DT_FIFO = 1,
|
||||
DT_CHR = 2,
|
||||
DT_DIR = 4,
|
||||
DT_BLK = 6,
|
||||
DT_REG = 8,
|
||||
DT_LNK = 10,
|
||||
DT_SOCK = 12,
|
||||
DT_WHT = 14
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
private unsafe struct InternalDirectoryEntry
|
||||
{
|
||||
internal IntPtr Name;
|
||||
internal int NameLength;
|
||||
internal NodeType InodeType;
|
||||
}
|
||||
|
||||
internal struct DirectoryEntry
|
||||
{
|
||||
internal NodeType InodeType;
|
||||
internal string InodeName;
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_OpenDir", SetLastError = true)]
|
||||
internal static extern Microsoft.Win32.SafeHandles.SafeDirectoryHandle OpenDir(string path);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetReadDirRBufferSize", SetLastError = false)]
|
||||
internal static extern int GetReadDirRBufferSize();
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_ReadDirR", SetLastError = false)]
|
||||
private static extern unsafe int ReadDirR(IntPtr dir, byte* buffer, int bufferSize, out InternalDirectoryEntry outputEntry);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_CloseDir", SetLastError = true)]
|
||||
internal static extern int CloseDir(IntPtr dir);
|
||||
|
||||
// The calling pattern for ReadDir is described in src/Native/System.Native/pal_readdir.cpp
|
||||
internal static int ReadDir(SafeDirectoryHandle dir, out DirectoryEntry outputEntry)
|
||||
{
|
||||
bool addedRef = false;
|
||||
try
|
||||
{
|
||||
// We avoid a native string copy into InternalDirectoryEntry.
|
||||
// - If the platform suppors reading into a buffer, the data is read directly into the buffer. The
|
||||
// data can be read as long as the buffer is valid.
|
||||
// - If the platform does not support reading into a buffer, the information returned in
|
||||
// InternalDirectoryEntry points to native memory owned by the SafeDirectoryHandle. The data is only
|
||||
// valid until the next call to CloseDir/ReadDir. We extend the reference until we have copied all data
|
||||
// to ensure it does not become invalid by a CloseDir; and we copy the data so our caller does not
|
||||
// use the native memory held by the SafeDirectoryHandle.
|
||||
dir.DangerousAddRef(ref addedRef);
|
||||
|
||||
unsafe
|
||||
{
|
||||
// s_readBufferSize is zero when the native implementation does not support reading into a buffer.
|
||||
byte* buffer = stackalloc byte[s_readBufferSize];
|
||||
InternalDirectoryEntry temp;
|
||||
int ret = ReadDirR(dir.DangerousGetHandle(), buffer, s_readBufferSize, out temp);
|
||||
// We copy data into DirectoryEntry to ensure there are no dangling references.
|
||||
outputEntry = ret == 0 ?
|
||||
new DirectoryEntry() { InodeName = GetDirectoryEntryName(temp), InodeType = temp.InodeType } :
|
||||
default(DirectoryEntry);
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (addedRef)
|
||||
{
|
||||
dir.DangerousRelease();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static unsafe string GetDirectoryEntryName(InternalDirectoryEntry dirEnt)
|
||||
{
|
||||
if (dirEnt.NameLength == -1)
|
||||
return Marshal.PtrToStringAnsi(dirEnt.Name);
|
||||
else
|
||||
return Marshal.PtrToStringAnsi(dirEnt.Name, dirEnt.NameLength);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using System.Buffers;
|
||||
using System.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
/// <summary>
|
||||
/// Takes a path to a symbolic link and attempts to place the link target path into the buffer. If the buffer is too
|
||||
/// small, the path will be truncated. No matter what, the buffer will not be null terminated.
|
||||
/// </summary>
|
||||
/// <param name="path">The path to the symlink</param>
|
||||
/// <param name="buffer">The buffer to hold the output path</param>
|
||||
/// <param name="bufferSize">The size of the buffer</param>
|
||||
/// <returns>
|
||||
/// Returns the number of bytes placed into the buffer on success; bufferSize if the buffer is too small; and -1 on error.
|
||||
/// </returns>
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_ReadLink", SetLastError = true)]
|
||||
private static extern unsafe int ReadLink(string path, byte[] buffer, int bufferSize);
|
||||
|
||||
/// <summary>
|
||||
/// Takes a path to a symbolic link and returns the link target path.
|
||||
/// </summary>
|
||||
/// <param name="path">The path to the symlink</param>
|
||||
/// <returns>
|
||||
/// Returns the link to the target path on success; and null otherwise.
|
||||
/// </returns>
|
||||
public static string ReadLink(string path)
|
||||
{
|
||||
int bufferSize = 256;
|
||||
do
|
||||
{
|
||||
byte[] buffer = ArrayPool<byte>.Shared.Rent(bufferSize);
|
||||
try
|
||||
{
|
||||
int resultLength = Interop.Sys.ReadLink(path, buffer, buffer.Length);
|
||||
if (resultLength < 0)
|
||||
{
|
||||
// error
|
||||
return null;
|
||||
}
|
||||
else if (resultLength < buffer.Length)
|
||||
{
|
||||
// success
|
||||
return Encoding.UTF8.GetString(buffer, 0, resultLength);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
ArrayPool<byte>.Shared.Return(buffer);
|
||||
}
|
||||
|
||||
// buffer was too small, loop around again and try with a larger buffer.
|
||||
bufferSize *= 2;
|
||||
} while (true);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
// Even though csc will by default use a sequential layout, a CS0649 warning as error
|
||||
// is produced for un-assigned fields when no StructLayout is specified.
|
||||
//
|
||||
// Explicitly saying Sequential disables that warning/error for consumers which only
|
||||
// use Stat in debug builds.
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
internal struct FileStatus
|
||||
{
|
||||
internal FileStatusFlags Flags;
|
||||
internal int Mode;
|
||||
internal uint Uid;
|
||||
internal uint Gid;
|
||||
internal long Size;
|
||||
internal long ATime;
|
||||
internal long ATimeNsec;
|
||||
internal long MTime;
|
||||
internal long MTimeNsec;
|
||||
internal long CTime;
|
||||
internal long CTimeNsec;
|
||||
internal long BirthTime;
|
||||
internal long BirthTimeNsec;
|
||||
internal long Dev;
|
||||
internal long Ino;
|
||||
}
|
||||
|
||||
internal static class FileTypes
|
||||
{
|
||||
internal const int S_IFMT = 0xF000;
|
||||
internal const int S_IFIFO = 0x1000;
|
||||
internal const int S_IFCHR = 0x2000;
|
||||
internal const int S_IFDIR = 0x4000;
|
||||
internal const int S_IFREG = 0x8000;
|
||||
internal const int S_IFLNK = 0xA000;
|
||||
internal const int S_IFSOCK = 0xC000;
|
||||
}
|
||||
|
||||
[Flags]
|
||||
internal enum FileStatusFlags
|
||||
{
|
||||
None = 0,
|
||||
HasBirthTime = 1,
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FStat2", SetLastError = true)]
|
||||
internal static extern int FStat(SafeFileHandle fd, out FileStatus output);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Stat2", SetLastError = true)]
|
||||
internal static extern int Stat(string path, out FileStatus output);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_LStat2", SetLastError = true)]
|
||||
internal static extern int LStat(string path, out FileStatus output);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal enum SysLogPriority : int
|
||||
{
|
||||
// Priorities
|
||||
LOG_EMERG = 0, /* system is unusable */
|
||||
LOG_ALERT = 1, /* action must be taken immediately */
|
||||
LOG_CRIT = 2, /* critical conditions */
|
||||
LOG_ERR = 3, /* error conditions */
|
||||
LOG_WARNING = 4, /* warning conditions */
|
||||
LOG_NOTICE = 5, /* normal but significant condition */
|
||||
LOG_INFO = 6, /* informational */
|
||||
LOG_DEBUG = 7, /* debug-level messages */
|
||||
// Facilities
|
||||
LOG_KERN = (0<<3), /* kernel messages */
|
||||
LOG_USER = (1<<3), /* random user-level messages */
|
||||
LOG_MAIL = (2<<3), /* mail system */
|
||||
LOG_DAEMON = (3<<3), /* system daemons */
|
||||
LOG_AUTH = (4<<3), /* authorization messages */
|
||||
LOG_SYSLOG = (5<<3), /* messages generated internally by syslogd */
|
||||
LOG_LPR = (6<<3), /* line printer subsystem */
|
||||
LOG_NEWS = (7<<3), /* network news subsystem */
|
||||
LOG_UUCP = (8<<3), /* UUCP subsystem */
|
||||
LOG_CRON = (9<<3), /* clock daemon */
|
||||
LOG_AUTHPRIV = (10<<3), /* authorization messages (private) */
|
||||
LOG_FTP = (11<<3), /* ftp daemon */
|
||||
// Between FTP and Local is reserved for system use
|
||||
LOG_LOCAL0 = (16<<3), /* reserved for local use */
|
||||
LOG_LOCAL1 = (17<<3), /* reserved for local use */
|
||||
LOG_LOCAL2 = (18<<3), /* reserved for local use */
|
||||
LOG_LOCAL3 = (19<<3), /* reserved for local use */
|
||||
LOG_LOCAL4 = (20<<3), /* reserved for local use */
|
||||
LOG_LOCAL5 = (21<<3), /* reserved for local use */
|
||||
LOG_LOCAL6 = (22<<3), /* reserved for local use */
|
||||
LOG_LOCAL7 = (23<<3), /* reserved for local use */
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write a message to the system logger, which in turn writes the message to the system console, log files, etc.
|
||||
/// See man 3 syslog for more info
|
||||
/// </summary>
|
||||
/// <param name="priority">
|
||||
/// The OR of a priority and facility in the SysLogPriority enum to declare the priority and facility of the log entry
|
||||
/// </param>
|
||||
/// <param name="message">The message to put in the log entry</param>
|
||||
/// <param name="arg1">Like printf, the argument is passed to the variadic part of the C++ function to wildcards in the message</param>
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_SysLog")]
|
||||
internal static extern void SysLog(SysLogPriority priority, string message, string arg1);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Unlink", SetLastError = true)]
|
||||
internal static extern int Unlink(string pathname);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
/// <summary>
|
||||
/// Writes the specified buffer to the provided open file descriptor
|
||||
/// </summary>
|
||||
/// <param name="fd">The file descriptor to try and write to</param>
|
||||
/// <param name="buffer">The data to attempt to write</param>
|
||||
/// <param name="bufferSize">The amount of data to write, in bytes</param>
|
||||
/// <returns>
|
||||
/// Returns the number of bytes written on success; otherwise, returns -1 and sets errno
|
||||
/// </returns>
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Write", SetLastError = true)]
|
||||
internal static extern unsafe int Write(SafeFileHandle fd, byte* buffer, int bufferSize);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Write", SetLastError = true)]
|
||||
internal static extern unsafe int Write(int fd, byte* buffer, int bufferSize);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
// 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.
|
||||
|
||||
internal partial class Interop
|
||||
{
|
||||
/// <summary>
|
||||
/// Blittable version of Windows BOOL type. It is convenient in situations where
|
||||
/// manual marshalling is required, or to avoid overhead of regular bool marshalling.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Some Windows APIs return arbitrary integer values although the return type is defined
|
||||
/// as BOOL. It is best to never compare BOOL to TRUE. Always use bResult != BOOL.FALSE
|
||||
/// or bResult == BOOL.FALSE .
|
||||
/// </remarks>
|
||||
internal enum BOOL : int
|
||||
{
|
||||
FALSE = 0,
|
||||
TRUE = 1,
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal partial class Interop
|
||||
{
|
||||
internal partial class Kernel32
|
||||
{
|
||||
[DllImport(Libraries.Kernel32, SetLastError = true)]
|
||||
internal static extern bool CloseHandle(IntPtr handle);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
// 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.
|
||||
|
||||
internal partial class Interop
|
||||
{
|
||||
internal partial class Kernel32
|
||||
{
|
||||
internal partial class FileTypes
|
||||
{
|
||||
internal const int FILE_TYPE_UNKNOWN = 0x0000;
|
||||
internal const int FILE_TYPE_DISK = 0x0001;
|
||||
internal const int FILE_TYPE_CHAR = 0x0002;
|
||||
internal const int FILE_TYPE_PIPE = 0x0003;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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 Microsoft.Win32.SafeHandles;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
internal partial class Interop
|
||||
{
|
||||
internal partial class Kernel32
|
||||
{
|
||||
[DllImport(Libraries.Kernel32, SetLastError = true)]
|
||||
internal static extern int GetFileType(SafeHandle hFile);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal partial class Interop
|
||||
{
|
||||
internal partial class Kernel32
|
||||
{
|
||||
[DllImport(Libraries.Kernel32, SetLastError = true, ExactSpelling = true)]
|
||||
internal static extern bool SetThreadErrorMode(uint dwNewMode, out uint lpOldMode);
|
||||
|
||||
internal const uint SEM_FAILCRITICALERRORS = 1;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
// 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.
|
||||
|
||||
namespace Microsoft.Win32.SafeHandles
|
||||
{
|
||||
sealed internal class SafeLibraryHandle : SafeHandleZeroOrMinusOneIsInvalid
|
||||
{
|
||||
internal SafeLibraryHandle() : base(true) { }
|
||||
|
||||
override protected bool ReleaseHandle()
|
||||
{
|
||||
return Interop.Kernel32.FreeLibrary(handle);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,428 @@
|
|||
// 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.Runtime.CompilerServices;
|
||||
using System.Text;
|
||||
|
||||
namespace System.IO
|
||||
{
|
||||
/// <summary>Contains internal path helpers that are shared between many projects.</summary>
|
||||
internal static partial class PathInternal
|
||||
{
|
||||
// All paths in Win32 ultimately end up becoming a path to a File object in the Windows object manager. Passed in paths get mapped through
|
||||
// DosDevice symbolic links in the object tree to actual File objects under \Devices. To illustrate, this is what happens with a typical
|
||||
// path "Foo" passed as a filename to any Win32 API:
|
||||
//
|
||||
// 1. "Foo" is recognized as a relative path and is appended to the current directory (say, "C:\" in our example)
|
||||
// 2. "C:\Foo" is prepended with the DosDevice namespace "\??\"
|
||||
// 3. CreateFile tries to create an object handle to the requested file "\??\C:\Foo"
|
||||
// 4. The Object Manager recognizes the DosDevices prefix and looks
|
||||
// a. First in the current session DosDevices ("\Sessions\1\DosDevices\" for example, mapped network drives go here)
|
||||
// b. If not found in the session, it looks in the Global DosDevices ("\GLOBAL??\")
|
||||
// 5. "C:" is found in DosDevices (in our case "\GLOBAL??\C:", which is a symbolic link to "\Device\HarddiskVolume6")
|
||||
// 6. The full path is now "\Device\HarddiskVolume6\Foo", "\Device\HarddiskVolume6" is a File object and parsing is handed off
|
||||
// to the registered parsing method for Files
|
||||
// 7. The registered open method for File objects is invoked to create the file handle which is then returned
|
||||
//
|
||||
// There are multiple ways to directly specify a DosDevices path. The final format of "\??\" is one way. It can also be specified
|
||||
// as "\\.\" (the most commonly documented way) and "\\?\". If the question mark syntax is used the path will skip normalization
|
||||
// (essentially GetFullPathName()) and path length checks.
|
||||
|
||||
// Windows Kernel-Mode Object Manager
|
||||
// https://msdn.microsoft.com/en-us/library/windows/hardware/ff565763.aspx
|
||||
// https://channel9.msdn.com/Shows/Going+Deep/Windows-NT-Object-Manager
|
||||
//
|
||||
// Introduction to MS-DOS Device Names
|
||||
// https://msdn.microsoft.com/en-us/library/windows/hardware/ff548088.aspx
|
||||
//
|
||||
// Local and Global MS-DOS Device Names
|
||||
// https://msdn.microsoft.com/en-us/library/windows/hardware/ff554302.aspx
|
||||
|
||||
internal const char DirectorySeparatorChar = '\\';
|
||||
internal const char AltDirectorySeparatorChar = '/';
|
||||
internal const char VolumeSeparatorChar = ':';
|
||||
internal const char PathSeparator = ';';
|
||||
|
||||
internal const string DirectorySeparatorCharAsString = "\\";
|
||||
|
||||
internal const string ExtendedPathPrefix = @"\\?\";
|
||||
internal const string UncPathPrefix = @"\\";
|
||||
internal const string UncExtendedPrefixToInsert = @"?\UNC\";
|
||||
internal const string UncExtendedPathPrefix = @"\\?\UNC\";
|
||||
internal const string DevicePathPrefix = @"\\.\";
|
||||
internal const string ParentDirectoryPrefix = @"..\";
|
||||
|
||||
internal const int MaxShortPath = 260;
|
||||
internal const int MaxShortDirectoryPath = 248;
|
||||
// \\?\, \\.\, \??\
|
||||
internal const int DevicePrefixLength = 4;
|
||||
// \\
|
||||
internal const int UncPrefixLength = 2;
|
||||
// \\?\UNC\, \\.\UNC\
|
||||
internal const int UncExtendedPrefixLength = 8;
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the given character is a valid drive letter
|
||||
/// </summary>
|
||||
internal static bool IsValidDriveChar(char value)
|
||||
{
|
||||
return ((value >= 'A' && value <= 'Z') || (value >= 'a' && value <= 'z'));
|
||||
}
|
||||
|
||||
internal static bool EndsWithPeriodOrSpace(string path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return false;
|
||||
|
||||
char c = path[path.Length - 1];
|
||||
return c == ' ' || c == '.';
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the extended path prefix (\\?\) if not already a device path, IF the path is not relative,
|
||||
/// AND the path is more than 259 characters. (> MAX_PATH + null). This will also insert the extended
|
||||
/// prefix if the path ends with a period or a space. Trailing periods and spaces are normally eaten
|
||||
/// away from paths during normalization, but if we see such a path at this point it should be
|
||||
/// normalized and has retained the final characters. (Typically from one of the *Info classes)
|
||||
/// </summary>
|
||||
internal static string EnsureExtendedPrefixIfNeeded(string path)
|
||||
{
|
||||
if (path != null && (path.Length >= MaxShortPath || EndsWithPeriodOrSpace(path)))
|
||||
{
|
||||
return EnsureExtendedPrefix(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// DO NOT USE- Use EnsureExtendedPrefixIfNeeded. This will be removed shortly.
|
||||
/// Adds the extended path prefix (\\?\) if not already a device path, IF the path is not relative,
|
||||
/// AND the path is more than 259 characters. (> MAX_PATH + null)
|
||||
/// </summary>
|
||||
internal static string EnsureExtendedPrefixOverMaxPath(string path)
|
||||
{
|
||||
if (path != null && path.Length >= MaxShortPath)
|
||||
{
|
||||
return EnsureExtendedPrefix(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
return path;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Adds the extended path prefix (\\?\) if not relative or already a device path.
|
||||
/// </summary>
|
||||
internal static string EnsureExtendedPrefix(string path)
|
||||
{
|
||||
// Putting the extended prefix on the path changes the processing of the path. It won't get normalized, which
|
||||
// means adding to relative paths will prevent them from getting the appropriate current directory inserted.
|
||||
|
||||
// If it already has some variant of a device path (\??\, \\?\, \\.\, //./, etc.) we don't need to change it
|
||||
// as it is either correct or we will be changing the behavior. When/if Windows supports long paths implicitly
|
||||
// in the future we wouldn't want normalization to come back and break existing code.
|
||||
|
||||
// In any case, all internal usages should be hitting normalize path (Path.GetFullPath) before they hit this
|
||||
// shimming method. (Or making a change that doesn't impact normalization, such as adding a filename to a
|
||||
// normalized base path.)
|
||||
if (IsPartiallyQualified(path.AsSpan()) || IsDevice(path.AsSpan()))
|
||||
return path;
|
||||
|
||||
// Given \\server\share in longpath becomes \\?\UNC\server\share
|
||||
if (path.StartsWith(UncPathPrefix, StringComparison.OrdinalIgnoreCase))
|
||||
return path.Insert(2, UncExtendedPrefixToInsert);
|
||||
|
||||
return ExtendedPathPrefix + path;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the path uses any of the DOS device path syntaxes. ("\\.\", "\\?\", or "\??\")
|
||||
/// </summary>
|
||||
internal static bool IsDevice(ReadOnlySpan<char> path)
|
||||
{
|
||||
// If the path begins with any two separators is will be recognized and normalized and prepped with
|
||||
// "\??\" for internal usage correctly. "\??\" is recognized and handled, "/??/" is not.
|
||||
return IsExtended(path)
|
||||
||
|
||||
(
|
||||
path.Length >= DevicePrefixLength
|
||||
&& IsDirectorySeparator(path[0])
|
||||
&& IsDirectorySeparator(path[1])
|
||||
&& (path[2] == '.' || path[2] == '?')
|
||||
&& IsDirectorySeparator(path[3])
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the path is a device UNC (\\?\UNC\, \\.\UNC\)
|
||||
/// </summary>
|
||||
internal static bool IsDeviceUNC(ReadOnlySpan<char> path)
|
||||
{
|
||||
return path.Length >= UncExtendedPrefixLength
|
||||
&& IsDevice(path)
|
||||
&& IsDirectorySeparator(path[7])
|
||||
&& path[4] == 'U'
|
||||
&& path[5] == 'N'
|
||||
&& path[6] == 'C';
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the path uses the canonical form of extended syntax ("\\?\" or "\??\"). If the
|
||||
/// path matches exactly (cannot use alternate directory separators) Windows will skip normalization
|
||||
/// and path length checks.
|
||||
/// </summary>
|
||||
internal static bool IsExtended(ReadOnlySpan<char> path)
|
||||
{
|
||||
// While paths like "//?/C:/" will work, they're treated the same as "\\.\" paths.
|
||||
// Skipping of normalization will *only* occur if back slashes ('\') are used.
|
||||
return path.Length >= DevicePrefixLength
|
||||
&& path[0] == '\\'
|
||||
&& (path[1] == '\\' || path[1] == '?')
|
||||
&& path[2] == '?'
|
||||
&& path[3] == '\\';
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check for known wildcard characters. '*' and '?' are the most common ones.
|
||||
/// </summary>
|
||||
internal static bool HasWildCardCharacters(ReadOnlySpan<char> path)
|
||||
{
|
||||
// Question mark is part of dos device syntax so we have to skip if we are
|
||||
int startIndex = IsDevice(path) ? ExtendedPathPrefix.Length : 0;
|
||||
|
||||
// [MS - FSA] 2.1.4.4 Algorithm for Determining if a FileName Is in an Expression
|
||||
// https://msdn.microsoft.com/en-us/library/ff469270.aspx
|
||||
for (int i = startIndex; i < path.Length; i++)
|
||||
{
|
||||
char c = path[i];
|
||||
if (c <= '?') // fast path for common case - '?' is highest wildcard character
|
||||
{
|
||||
if (c == '\"' || c == '<' || c == '>' || c == '*' || c == '?')
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the length of the root of the path (drive, share, etc.).
|
||||
/// </summary>
|
||||
internal static int GetRootLength(ReadOnlySpan<char> path)
|
||||
{
|
||||
int pathLength = path.Length;
|
||||
int i = 0;
|
||||
|
||||
bool deviceSyntax = IsDevice(path);
|
||||
bool deviceUnc = deviceSyntax && IsDeviceUNC(path);
|
||||
|
||||
if ((!deviceSyntax || deviceUnc) && pathLength > 0 && IsDirectorySeparator(path[0]))
|
||||
{
|
||||
// UNC or simple rooted path (e.g. "\foo", NOT "\\?\C:\foo")
|
||||
if (deviceUnc || (pathLength > 1 && IsDirectorySeparator(path[1])))
|
||||
{
|
||||
// UNC (\\?\UNC\ or \\), scan past server\share
|
||||
|
||||
// Start past the prefix ("\\" or "\\?\UNC\")
|
||||
i = deviceUnc ? UncExtendedPrefixLength : UncPrefixLength;
|
||||
|
||||
// Skip two separators at most
|
||||
int n = 2;
|
||||
while (i < pathLength && (!IsDirectorySeparator(path[i]) || --n > 0))
|
||||
i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Current drive rooted (e.g. "\foo")
|
||||
i = 1;
|
||||
}
|
||||
}
|
||||
else if (deviceSyntax)
|
||||
{
|
||||
// Device path (e.g. "\\?\.", "\\.\")
|
||||
// Skip any characters following the prefix that aren't a separator
|
||||
i = DevicePrefixLength;
|
||||
while (i < pathLength && !IsDirectorySeparator(path[i]))
|
||||
i++;
|
||||
|
||||
// If there is another separator take it, as long as we have had at least one
|
||||
// non-separator after the prefix (e.g. don't take "\\?\\", but take "\\?\a\")
|
||||
if (i < pathLength && i > DevicePrefixLength && IsDirectorySeparator(path[i]))
|
||||
i++;
|
||||
}
|
||||
else if (pathLength >= 2
|
||||
&& path[1] == VolumeSeparatorChar
|
||||
&& IsValidDriveChar(path[0]))
|
||||
{
|
||||
// Valid drive specified path ("C:", "D:", etc.)
|
||||
i = 2;
|
||||
|
||||
// If the colon is followed by a directory separator, move past it (e.g "C:\")
|
||||
if (pathLength > 2 && IsDirectorySeparator(path[2]))
|
||||
i++;
|
||||
}
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the path specified is relative to the current drive or working directory.
|
||||
/// Returns false if the path is fixed to a specific drive or UNC path. This method does no
|
||||
/// validation of the path (URIs will be returned as relative as a result).
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Handles paths that use the alternate directory separator. It is a frequent mistake to
|
||||
/// assume that rooted paths (Path.IsPathRooted) are not relative. This isn't the case.
|
||||
/// "C:a" is drive relative- meaning that it will be resolved against the current directory
|
||||
/// for C: (rooted, but relative). "C:\a" is rooted and not relative (the current directory
|
||||
/// will not be used to modify the path).
|
||||
/// </remarks>
|
||||
internal static bool IsPartiallyQualified(ReadOnlySpan<char> path)
|
||||
{
|
||||
if (path.Length < 2)
|
||||
{
|
||||
// It isn't fixed, it must be relative. There is no way to specify a fixed
|
||||
// path with one character (or less).
|
||||
return true;
|
||||
}
|
||||
|
||||
if (IsDirectorySeparator(path[0]))
|
||||
{
|
||||
// There is no valid way to specify a relative path with two initial slashes or
|
||||
// \? as ? isn't valid for drive relative paths and \??\ is equivalent to \\?\
|
||||
return !(path[1] == '?' || IsDirectorySeparator(path[1]));
|
||||
}
|
||||
|
||||
// The only way to specify a fixed path that doesn't begin with two slashes
|
||||
// is the drive, colon, slash format- i.e. C:\
|
||||
return !((path.Length >= 3)
|
||||
&& (path[1] == VolumeSeparatorChar)
|
||||
&& IsDirectorySeparator(path[2])
|
||||
// To match old behavior we'll check the drive character for validity as the path is technically
|
||||
// not qualified if you don't have a valid drive. "=:\" is the "=" file's default data stream.
|
||||
&& IsValidDriveChar(path[0]));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// True if the given character is a directory separator.
|
||||
/// </summary>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
internal static bool IsDirectorySeparator(char c)
|
||||
{
|
||||
return c == DirectorySeparatorChar || c == AltDirectorySeparatorChar;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Normalize separators in the given path. Converts forward slashes into back slashes and compresses slash runs, keeping initial 2 if present.
|
||||
/// Also trims initial whitespace in front of "rooted" paths (see PathStartSkip).
|
||||
///
|
||||
/// This effectively replicates the behavior of the legacy NormalizePath when it was called with fullCheck=false and expandShortpaths=false.
|
||||
/// The current NormalizePath gets directory separator normalization from Win32's GetFullPathName(), which will resolve relative paths and as
|
||||
/// such can't be used here (and is overkill for our uses).
|
||||
///
|
||||
/// Like the current NormalizePath this will not try and analyze periods/spaces within directory segments.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The only callers that used to use Path.Normalize(fullCheck=false) were Path.GetDirectoryName() and Path.GetPathRoot(). Both usages do
|
||||
/// not need trimming of trailing whitespace here.
|
||||
///
|
||||
/// GetPathRoot() could technically skip normalizing separators after the second segment- consider as a future optimization.
|
||||
///
|
||||
/// For legacy desktop behavior with ExpandShortPaths:
|
||||
/// - It has no impact on GetPathRoot() so doesn't need consideration.
|
||||
/// - It could impact GetDirectoryName(), but only if the path isn't relative (C:\ or \\Server\Share).
|
||||
///
|
||||
/// In the case of GetDirectoryName() the ExpandShortPaths behavior was undocumented and provided inconsistent results if the path was
|
||||
/// fixed/relative. For example: "C:\PROGRA~1\A.TXT" would return "C:\Program Files" while ".\PROGRA~1\A.TXT" would return ".\PROGRA~1". If you
|
||||
/// ultimately call GetFullPath() this doesn't matter, but if you don't or have any intermediate string handling could easily be tripped up by
|
||||
/// this undocumented behavior.
|
||||
///
|
||||
/// We won't match this old behavior because:
|
||||
///
|
||||
/// 1. It was undocumented
|
||||
/// 2. It was costly (extremely so if it actually contained '~')
|
||||
/// 3. Doesn't play nice with string logic
|
||||
/// 4. Isn't a cross-plat friendly concept/behavior
|
||||
/// </remarks>
|
||||
internal static string NormalizeDirectorySeparators(string path)
|
||||
{
|
||||
if (string.IsNullOrEmpty(path))
|
||||
return path;
|
||||
|
||||
char current;
|
||||
|
||||
// Make a pass to see if we need to normalize so we can potentially skip allocating
|
||||
bool normalized = true;
|
||||
|
||||
for (int i = 0; i < path.Length; i++)
|
||||
{
|
||||
current = path[i];
|
||||
if (IsDirectorySeparator(current)
|
||||
&& (current != DirectorySeparatorChar
|
||||
// Check for sequential separators past the first position (we need to keep initial two for UNC/extended)
|
||||
|| (i > 0 && i + 1 < path.Length && IsDirectorySeparator(path[i + 1]))))
|
||||
{
|
||||
normalized = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (normalized)
|
||||
return path;
|
||||
|
||||
StringBuilder builder = new StringBuilder(path.Length);
|
||||
|
||||
int start = 0;
|
||||
if (IsDirectorySeparator(path[start]))
|
||||
{
|
||||
start++;
|
||||
builder.Append(DirectorySeparatorChar);
|
||||
}
|
||||
|
||||
for (int i = start; i < path.Length; i++)
|
||||
{
|
||||
current = path[i];
|
||||
|
||||
// If we have a separator
|
||||
if (IsDirectorySeparator(current))
|
||||
{
|
||||
// If the next is a separator, skip adding this
|
||||
if (i + 1 < path.Length && IsDirectorySeparator(path[i + 1]))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ensure it is the primary separator
|
||||
current = DirectorySeparatorChar;
|
||||
}
|
||||
|
||||
builder.Append(current);
|
||||
}
|
||||
|
||||
return builder.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the path is effectively empty for the current OS.
|
||||
/// For unix, this is empty or null. For Windows, this is empty, null, or
|
||||
/// just spaces ((char)32).
|
||||
/// </summary>
|
||||
internal static bool IsEffectivelyEmpty(ReadOnlySpan<char> path)
|
||||
{
|
||||
if (path.IsEmpty)
|
||||
return true;
|
||||
|
||||
foreach (char c in path)
|
||||
{
|
||||
if (c != ' ')
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,189 @@
|
|||
// 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.
|
||||
|
||||
// Helper methods for using Tasks to implement the APM pattern.
|
||||
//
|
||||
// Example usage, wrapping a Task<int>-returning FooAsync method with Begin/EndFoo methods:
|
||||
//
|
||||
// public IAsyncResult BeginFoo(..., AsyncCallback callback, object state)
|
||||
// {
|
||||
// Task<int> t = FooAsync(...);
|
||||
// return TaskToApm.Begin(t, callback, state);
|
||||
// }
|
||||
// public int EndFoo(IAsyncResult asyncResult)
|
||||
// {
|
||||
// return TaskToApm.End<int>(asyncResult);
|
||||
// }
|
||||
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace System.Threading.Tasks
|
||||
{
|
||||
/// <summary>
|
||||
/// Provides support for efficiently using Tasks to implement the APM (Begin/End) pattern.
|
||||
/// </summary>
|
||||
internal static class TaskToApm
|
||||
{
|
||||
/// <summary>
|
||||
/// Marshals the Task as an IAsyncResult, using the supplied callback and state
|
||||
/// to implement the APM pattern.
|
||||
/// </summary>
|
||||
/// <param name="task">The Task to be marshaled.</param>
|
||||
/// <param name="callback">The callback to be invoked upon completion.</param>
|
||||
/// <param name="state">The state to be stored in the IAsyncResult.</param>
|
||||
/// <returns>An IAsyncResult to represent the task's asynchronous operation.</returns>
|
||||
public static IAsyncResult Begin(Task task, AsyncCallback callback, object state)
|
||||
{
|
||||
Debug.Assert(task != null);
|
||||
|
||||
// If the task has already completed, then since the Task's CompletedSynchronously==false
|
||||
// and we want it to be true, we need to create a new IAsyncResult. (We also need the AsyncState to match.)
|
||||
IAsyncResult asyncResult;
|
||||
if (task.IsCompleted)
|
||||
{
|
||||
// Synchronous completion.
|
||||
asyncResult = new TaskWrapperAsyncResult(task, state, completedSynchronously: true);
|
||||
callback?.Invoke(asyncResult);
|
||||
}
|
||||
else
|
||||
{
|
||||
// For asynchronous completion we need to schedule a callback. Whether we can use the Task as the IAsyncResult
|
||||
// depends on whether the Task's AsyncState has reference equality with the requested state.
|
||||
asyncResult = task.AsyncState == state ? (IAsyncResult)task : new TaskWrapperAsyncResult(task, state, completedSynchronously: false);
|
||||
if (callback != null)
|
||||
{
|
||||
InvokeCallbackWhenTaskCompletes(task, callback, asyncResult);
|
||||
}
|
||||
}
|
||||
return asyncResult;
|
||||
}
|
||||
|
||||
/// <summary>Processes an IAsyncResult returned by Begin.</summary>
|
||||
/// <param name="asyncResult">The IAsyncResult to unwrap.</param>
|
||||
public static void End(IAsyncResult asyncResult)
|
||||
{
|
||||
Task task;
|
||||
|
||||
// If the IAsyncResult is our task-wrapping IAsyncResult, extract the Task.
|
||||
var twar = asyncResult as TaskWrapperAsyncResult;
|
||||
if (twar != null)
|
||||
{
|
||||
task = twar.Task;
|
||||
Debug.Assert(task != null, "TaskWrapperAsyncResult should never wrap a null Task.");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise, the IAsyncResult should be a Task.
|
||||
task = asyncResult as Task;
|
||||
}
|
||||
|
||||
// Make sure we actually got a task, then complete the operation by waiting on it.
|
||||
if (task == null)
|
||||
{
|
||||
throw new ArgumentNullException();
|
||||
}
|
||||
|
||||
task.GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
/// <summary>Processes an IAsyncResult returned by Begin.</summary>
|
||||
/// <param name="asyncResult">The IAsyncResult to unwrap.</param>
|
||||
public static TResult End<TResult>(IAsyncResult asyncResult)
|
||||
{
|
||||
Task<TResult> task;
|
||||
|
||||
// If the IAsyncResult is our task-wrapping IAsyncResult, extract the Task.
|
||||
var twar = asyncResult as TaskWrapperAsyncResult;
|
||||
if (twar != null)
|
||||
{
|
||||
task = twar.Task as Task<TResult>;
|
||||
Debug.Assert(twar.Task != null, "TaskWrapperAsyncResult should never wrap a null Task.");
|
||||
}
|
||||
else
|
||||
{
|
||||
// Otherwise, the IAsyncResult should be a Task<TResult>.
|
||||
task = asyncResult as Task<TResult>;
|
||||
}
|
||||
|
||||
// Make sure we actually got a task, then complete the operation by waiting on it.
|
||||
if (task == null)
|
||||
{
|
||||
throw new ArgumentNullException();
|
||||
}
|
||||
|
||||
return task.GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
/// <summary>Invokes the callback asynchronously when the task has completed.</summary>
|
||||
/// <param name="antecedent">The Task to await.</param>
|
||||
/// <param name="callback">The callback to invoke when the Task completes.</param>
|
||||
/// <param name="asyncResult">The Task used as the IAsyncResult.</param>
|
||||
private static void InvokeCallbackWhenTaskCompletes(Task antecedent, AsyncCallback callback, IAsyncResult asyncResult)
|
||||
{
|
||||
Debug.Assert(antecedent != null);
|
||||
Debug.Assert(callback != null);
|
||||
Debug.Assert(asyncResult != null);
|
||||
|
||||
// We use OnCompleted rather than ContinueWith in order to avoid running synchronously
|
||||
// if the task has already completed by the time we get here. This is separated out into
|
||||
// its own method currently so that we only pay for the closure if necessary.
|
||||
antecedent.ConfigureAwait(continueOnCapturedContext: false)
|
||||
.GetAwaiter()
|
||||
.OnCompleted(() => callback(asyncResult));
|
||||
|
||||
// PERFORMANCE NOTE:
|
||||
// Assuming we're in the default ExecutionContext, the "slow path" of an incomplete
|
||||
// task will result in four allocations: the new IAsyncResult, the delegate+closure
|
||||
// in this method, and the continuation object inside of OnCompleted (necessary
|
||||
// to capture both the Action delegate and the ExecutionContext in a single object).
|
||||
// In the future, if performance requirements drove a need, those four
|
||||
// allocations could be reduced to one. This would be achieved by having TaskWrapperAsyncResult
|
||||
// also implement ITaskCompletionAction (and optionally IThreadPoolWorkItem). It would need
|
||||
// additional fields to store the AsyncCallback and an ExecutionContext. Once configured,
|
||||
// it would be set into the Task as a continuation. Its Invoke method would then be run when
|
||||
// the antecedent completed, and, doing all of the necessary work to flow ExecutionContext,
|
||||
// it would invoke the AsyncCallback. It could also have a field on it for the antecedent,
|
||||
// so that the End method would have access to the completed antecedent. For related examples,
|
||||
// see other implementations of ITaskCompletionAction, and in particular ReadWriteTask
|
||||
// used in Stream.Begin/EndXx's implementation.
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Provides a simple IAsyncResult that wraps a Task. This, in effect, allows
|
||||
/// for overriding what's seen for the CompletedSynchronously and AsyncState values.
|
||||
/// </summary>
|
||||
private sealed class TaskWrapperAsyncResult : IAsyncResult
|
||||
{
|
||||
/// <summary>The wrapped Task.</summary>
|
||||
internal readonly Task Task;
|
||||
/// <summary>The new AsyncState value.</summary>
|
||||
private readonly object _state;
|
||||
/// <summary>The new CompletedSynchronously value.</summary>
|
||||
private readonly bool _completedSynchronously;
|
||||
|
||||
/// <summary>Initializes the IAsyncResult with the Task to wrap and the overriding AsyncState and CompletedSynchronously values.</summary>
|
||||
/// <param name="task">The Task to wrap.</param>
|
||||
/// <param name="state">The new AsyncState value</param>
|
||||
/// <param name="completedSynchronously">The new CompletedSynchronously value.</param>
|
||||
internal TaskWrapperAsyncResult(Task task, object state, bool completedSynchronously)
|
||||
{
|
||||
Debug.Assert(task != null);
|
||||
Debug.Assert(!completedSynchronously || task.IsCompleted, "If completedSynchronously is true, the task must be completed.");
|
||||
|
||||
this.Task = task;
|
||||
_state = state;
|
||||
_completedSynchronously = completedSynchronously;
|
||||
}
|
||||
|
||||
// The IAsyncResult implementation.
|
||||
// - IsCompleted and AsyncWaitHandle just pass through to the Task.
|
||||
// - AsyncState and CompletedSynchronously return the corresponding values stored in this object.
|
||||
|
||||
object IAsyncResult.AsyncState { get { return _state; } }
|
||||
bool IAsyncResult.CompletedSynchronously { get { return _completedSynchronously; } }
|
||||
bool IAsyncResult.IsCompleted { get { return this.Task.IsCompleted; } }
|
||||
WaitHandle IAsyncResult.AsyncWaitHandle { get { return ((IAsyncResult)this.Task).AsyncWaitHandle; } }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
// 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.
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Libraries
|
||||
{
|
||||
// Shims
|
||||
internal const string SystemNative = "System.Native";
|
||||
internal const string HttpNative = "System.Net.Http.Native";
|
||||
internal const string NetSecurityNative = "System.Net.Security.Native";
|
||||
internal const string CryptoNative = "System.Security.Cryptography.Native.OpenSsl";
|
||||
internal const string CompressionNative = "System.IO.Compression.Native";
|
||||
internal const string IOPortsNative = "System.IO.Ports.Native";
|
||||
internal const string Libdl = "libdl";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Accept")]
|
||||
internal static extern unsafe Error Accept(SafeHandle socket, byte* socketAddress, int* socketAddressLen, IntPtr* acceptedFd);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal enum AccessMode : int
|
||||
{
|
||||
F_OK = 0, /* Check for existence */
|
||||
X_OK = 1, /* Check for execute */
|
||||
W_OK = 2, /* Check for write */
|
||||
R_OK = 4, /* Check for read */
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Access", SetLastError = true)]
|
||||
internal static extern int Access(string path, AccessMode mode);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
// 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.Net.Sockets;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Bind")]
|
||||
internal static extern unsafe Error Bind(SafeHandle socket, ProtocolType socketProtocolType, byte* socketAddress, int socketAddressLen);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_ChDir", SetLastError = true)]
|
||||
internal static extern int ChDir(string path);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_ChMod", SetLastError = true)]
|
||||
internal static extern int ChMod(string path, int mode);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Connect")]
|
||||
internal static extern unsafe Error Connect(SafeHandle socket, byte* socketAddress, int socketAddressLen);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
// 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 Microsoft.Win32.SafeHandles;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_CopyFile", SetLastError = true)]
|
||||
internal static extern int CopyFile(SafeFileHandle source, SafeFileHandle destination);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_Dup", SetLastError = true)]
|
||||
internal static extern SafeFileHandle Dup(SafeFileHandle oldfd);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public unsafe struct LinkLayerAddressInfo
|
||||
{
|
||||
public int InterfaceIndex;
|
||||
public fixed byte AddressBytes[8];
|
||||
public byte NumAddressBytes;
|
||||
private byte __padding; // For native struct-size padding. Does not contain useful data.
|
||||
public ushort HardwareType;
|
||||
}
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public unsafe struct IpAddressInfo
|
||||
{
|
||||
public int InterfaceIndex;
|
||||
public fixed byte AddressBytes[16];
|
||||
public byte NumAddressBytes;
|
||||
private fixed byte __padding[3];
|
||||
}
|
||||
|
||||
public unsafe delegate void IPv4AddressDiscoveredCallback(string ifaceName, IpAddressInfo* ipAddressInfo, IpAddressInfo* netMaskInfo);
|
||||
public unsafe delegate void IPv6AddressDiscoveredCallback(string ifaceName, IpAddressInfo* ipAddressInfo, uint* scopeId);
|
||||
public unsafe delegate void LinkLayerAddressDiscoveredCallback(string ifaceName, LinkLayerAddressInfo* llAddress);
|
||||
public unsafe delegate void DnsAddessDiscoveredCallback(IpAddressInfo* gatewayAddress);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_EnumerateInterfaceAddresses")]
|
||||
public static extern int EnumerateInterfaceAddresses(
|
||||
IPv4AddressDiscoveredCallback ipv4Found,
|
||||
IPv6AddressDiscoveredCallback ipv6Found,
|
||||
LinkLayerAddressDiscoveredCallback linkLayerFound);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_EnumerateGatewayAddressesForInterface")]
|
||||
public static extern int EnumerateGatewayAddressesForInterface(uint interfaceIndex, DnsAddessDiscoveredCallback onGatewayFound);
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
// 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 Microsoft.Win32.SafeHandles;
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FChMod", SetLastError = true)]
|
||||
internal static extern int FChMod(SafeFileHandle fd, int mode);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal static partial class Fcntl
|
||||
{
|
||||
internal static readonly bool CanGetSetPipeSz = (FcntlCanGetSetPipeSz() != 0);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FcntlGetPipeSz", SetLastError=true)]
|
||||
internal static extern int GetPipeSz(SafePipeHandle fd);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FcntlSetPipeSz", SetLastError=true)]
|
||||
internal static extern int SetPipeSz(SafePipeHandle fd, int size);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FcntlCanGetSetPipeSz")]
|
||||
private static extern int FcntlCanGetSetPipeSz();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal static partial class Fcntl
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FcntlSetCloseOnExec", SetLastError=true)]
|
||||
internal static extern int SetCloseOnExec(SafeHandle fd);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal static class Fcntl
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FcntlSetIsNonBlocking", SetLastError = true)]
|
||||
internal static extern int DangerousSetIsNonBlocking(IntPtr fd, int isNonBlocking);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_FcntlSetIsNonBlocking", SetLastError=true)]
|
||||
internal static extern int SetIsNonBlocking(SafeHandle fd, int isNonBlocking);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
// 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 Microsoft.Win32.SafeHandles;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal static class FileDescriptors
|
||||
{
|
||||
internal static readonly SafeFileHandle STDIN_FILENO = CreateFileHandle(0);
|
||||
internal static readonly SafeFileHandle STDOUT_FILENO = CreateFileHandle(1);
|
||||
internal static readonly SafeFileHandle STDERR_FILENO = CreateFileHandle(2);
|
||||
|
||||
private static SafeFileHandle CreateFileHandle(int fileNumber)
|
||||
{
|
||||
return new SafeFileHandle((IntPtr)fileNumber, ownsHandle: false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,111 @@
|
|||
// 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.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
internal static unsafe void ForkAndExecProcess(
|
||||
string filename, string[] argv, string[] envp, string cwd,
|
||||
bool redirectStdin, bool redirectStdout, bool redirectStderr,
|
||||
bool setUser, uint userId, uint groupId,
|
||||
out int lpChildPid, out int stdinFd, out int stdoutFd, out int stderrFd, bool shouldThrow = true)
|
||||
{
|
||||
byte** argvPtr = null, envpPtr = null;
|
||||
int result = -1;
|
||||
try
|
||||
{
|
||||
AllocNullTerminatedArray(argv, ref argvPtr);
|
||||
AllocNullTerminatedArray(envp, ref envpPtr);
|
||||
result = ForkAndExecProcess(
|
||||
filename, argvPtr, envpPtr, cwd,
|
||||
redirectStdin ? 1 : 0, redirectStdout ? 1 : 0, redirectStderr ? 1 :0,
|
||||
setUser ? 1 : 0, userId, groupId,
|
||||
out lpChildPid, out stdinFd, out stdoutFd, out stderrFd);
|
||||
if (result != 0)
|
||||
{
|
||||
// Normally we'd simply make this method return the result of the native
|
||||
// call and allow the caller to use GetLastWin32Error. However, we need
|
||||
// to free the native arrays after calling the function, and doing so
|
||||
// stomps on the runtime's captured last error. So we need to access the
|
||||
// error here, and without SetLastWin32Error available, we can't propagate
|
||||
// the error to the caller via the normal GetLastWin32Error mechanism. We could
|
||||
// return 0 on success or the GetLastWin32Error value on failure, but that's
|
||||
// technically ambiguous, in the case of a failure with a 0 errno. Simplest
|
||||
// solution then is just to throw here the same exception the Process caller
|
||||
// would have. This can be revisited if we ever have another call site.
|
||||
throw new Win32Exception();
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
FreeArray(envpPtr, envp.Length);
|
||||
FreeArray(argvPtr, argv.Length);
|
||||
}
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_ForkAndExecProcess", SetLastError = true)]
|
||||
private static extern unsafe int ForkAndExecProcess(
|
||||
string filename, byte** argv, byte** envp, string cwd,
|
||||
int redirectStdin, int redirectStdout, int redirectStderr,
|
||||
int setUser, uint userId, uint groupId,
|
||||
out int lpChildPid, out int stdinFd, out int stdoutFd, out int stderrFd);
|
||||
|
||||
private static unsafe void AllocNullTerminatedArray(string[] arr, ref byte** arrPtr)
|
||||
{
|
||||
int arrLength = arr.Length + 1; // +1 is for null termination
|
||||
|
||||
// Allocate the unmanaged array to hold each string pointer.
|
||||
// It needs to have an extra element to null terminate the array.
|
||||
arrPtr = (byte**)Marshal.AllocHGlobal(sizeof(IntPtr) * arrLength);
|
||||
Debug.Assert(arrPtr != null);
|
||||
|
||||
// Zero the memory so that if any of the individual string allocations fails,
|
||||
// we can loop through the array to free any that succeeded.
|
||||
// The last element will remain null.
|
||||
for (int i = 0; i < arrLength; i++)
|
||||
{
|
||||
arrPtr[i] = null;
|
||||
}
|
||||
|
||||
// Now copy each string to unmanaged memory referenced from the array.
|
||||
// We need the data to be an unmanaged, null-terminated array of UTF8-encoded bytes.
|
||||
for (int i = 0; i < arr.Length; i++)
|
||||
{
|
||||
byte[] byteArr = Encoding.UTF8.GetBytes(arr[i]);
|
||||
|
||||
arrPtr[i] = (byte*)Marshal.AllocHGlobal(byteArr.Length + 1); //+1 for null termination
|
||||
Debug.Assert(arrPtr[i] != null);
|
||||
|
||||
Marshal.Copy(byteArr, 0, (IntPtr)arrPtr[i], byteArr.Length); // copy over the data from the managed byte array
|
||||
arrPtr[i][byteArr.Length] = (byte)'\0'; // null terminate
|
||||
}
|
||||
}
|
||||
|
||||
private static unsafe void FreeArray(byte** arr, int length)
|
||||
{
|
||||
if (arr != null)
|
||||
{
|
||||
// Free each element of the array
|
||||
for (int i = 0; i < length; i++)
|
||||
{
|
||||
if (arr[i] != null)
|
||||
{
|
||||
Marshal.FreeHGlobal((IntPtr)arr[i]);
|
||||
arr[i] = null;
|
||||
}
|
||||
}
|
||||
|
||||
// And then the array itself
|
||||
Marshal.FreeHGlobal((IntPtr)arr);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetBytesAvailable")]
|
||||
internal static extern unsafe Error GetBytesAvailable(SafeHandle socket, int* available);
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetAtOutOfBandMark")]
|
||||
internal static extern unsafe Error GetAtOutOfBandMark(SafeHandle socket, int* atMark);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetControlCharacters")]
|
||||
internal static extern void GetControlCharacters(
|
||||
ControlCharacterNames[] controlCharacterNames, byte[] controlCharacterValues, int controlCharacterLength,
|
||||
out byte posixDisableValue);
|
||||
|
||||
internal enum ControlCharacterNames : int
|
||||
{
|
||||
VINTR = 0,
|
||||
VQUIT = 1,
|
||||
VERASE = 2,
|
||||
VKILL = 3,
|
||||
VEOF = 4,
|
||||
VTIME = 5,
|
||||
VMIN = 6,
|
||||
VSWTC = 7,
|
||||
VSTART = 8,
|
||||
VSTOP = 9,
|
||||
VSUSP = 10,
|
||||
VEOL = 11,
|
||||
VREPRINT = 12,
|
||||
VDISCARD = 13,
|
||||
VWERASE = 14,
|
||||
VLNEXT = 15,
|
||||
VEOL2 = 16
|
||||
};
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
// 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.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetDomainName", SetLastError = true)]
|
||||
private static extern unsafe int GetDomainName(byte* name, int len);
|
||||
|
||||
internal static unsafe string GetDomainName()
|
||||
{
|
||||
const int HOST_NAME_MAX = 255; // man getdomainname
|
||||
const int ArrLength = HOST_NAME_MAX + 1;
|
||||
|
||||
byte* name = stackalloc byte[ArrLength];
|
||||
int err = GetDomainName(name, ArrLength);
|
||||
if (err != 0)
|
||||
{
|
||||
// This should never happen. According to the man page,
|
||||
// the only possible errno for getdomainname is ENAMETOOLONG,
|
||||
// which should only happen if the buffer we supply isn't big
|
||||
// enough, and we're using a buffer size that the man page
|
||||
// says is the max for POSIX (and larger than the max for Linux).
|
||||
Debug.Fail($"{nameof(GetDomainName)} failed with error {err}");
|
||||
throw new InvalidOperationException($"{nameof(GetDomainName)}: {err}");
|
||||
}
|
||||
|
||||
// Marshal.PtrToStringAnsi uses UTF8 on Unix.
|
||||
return Marshal.PtrToStringAnsi((IntPtr)name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetDomainSocketSizes")]
|
||||
internal static extern void GetDomainSocketSizes(out int pathOffset, out int pathSize, out int addressSize);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetEGid")]
|
||||
internal static extern uint GetEGid();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetEUid")]
|
||||
internal static extern uint GetEUid();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
// 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.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetHostName", SetLastError = true)]
|
||||
private static extern unsafe int GetHostName(byte* name, int nameLength);
|
||||
|
||||
internal static unsafe string GetHostName()
|
||||
{
|
||||
const int HOST_NAME_MAX = 255;
|
||||
const int ArrLength = HOST_NAME_MAX + 1;
|
||||
|
||||
byte* name = stackalloc byte[ArrLength];
|
||||
int err = GetHostName(name, ArrLength);
|
||||
if (err != 0)
|
||||
{
|
||||
// This should never happen. According to the man page,
|
||||
// the only possible errno for gethostname is ENAMETOOLONG,
|
||||
// which should only happen if the buffer we supply isn't big
|
||||
// enough, and we're using a buffer size that the man page
|
||||
// says is the max for POSIX (and larger than the max for Linux).
|
||||
Debug.Fail("gethostname failed");
|
||||
throw new InvalidOperationException(string.Format("gethostname returned {0}", err));
|
||||
}
|
||||
|
||||
// If the hostname is truncated, it is unspecified whether the returned buffer includes a terminating null byte.
|
||||
name[ArrLength - 1] = 0;
|
||||
|
||||
return Marshal.PtrToStringAnsi((IntPtr)name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetLine", SetLastError = true)]
|
||||
internal static extern string GetLine(IntPtr stream);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[Flags]
|
||||
internal enum GetNameInfoFlags : int
|
||||
{
|
||||
NI_NAMEREQD = 0x1,
|
||||
NI_NUMERICHOST = 0x2,
|
||||
}
|
||||
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetNameInfo")]
|
||||
internal static extern unsafe int GetNameInfo(
|
||||
byte* address,
|
||||
uint addressLength,
|
||||
byte isIpv6,
|
||||
byte* host,
|
||||
uint hostLength,
|
||||
byte* service,
|
||||
uint serviceLength,
|
||||
GetNameInfoFlags flags);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
// 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.Diagnostics;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetNodeName", SetLastError = true)]
|
||||
private static extern unsafe int GetNodeName(char* name, out int len);
|
||||
|
||||
internal static unsafe string GetNodeName()
|
||||
{
|
||||
// max value of _UTSNAME_LENGTH on known Unix platforms is 1024.
|
||||
const int _UTSNAME_LENGTH = 1024;
|
||||
int len = _UTSNAME_LENGTH;
|
||||
char* name = stackalloc char[_UTSNAME_LENGTH];
|
||||
int err = GetNodeName(name, out len);
|
||||
if (err != 0)
|
||||
{
|
||||
// max domain name can be 255 chars.
|
||||
Debug.Fail($"{nameof(GetNodeName)} failed with error {err}");
|
||||
throw new InvalidOperationException(string.Format($"{nameof(GetNodeName)}: {err}");
|
||||
}
|
||||
|
||||
// Marshal.PtrToStringAnsi uses UTF8 on Unix.
|
||||
return Marshal.PtrToStringAnsi((IntPtr)name);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetOSArchitecture")]
|
||||
internal static extern int GetOSArchitecture();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetPeerID", SetLastError = true)]
|
||||
internal static extern unsafe int GetPeerID(SafeHandle socket, out uint euid);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// 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.Runtime.InteropServices;
|
||||
|
||||
internal static partial class Interop
|
||||
{
|
||||
internal static partial class Sys
|
||||
{
|
||||
[DllImport(Libraries.SystemNative, EntryPoint = "SystemNative_GetPeerName")]
|
||||
internal static extern unsafe Error GetPeerName(SafeHandle socket, byte* socketAddress, int* socketAddressLen);
|
||||
}
|
||||
}
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче