From c01cbed4dc9b47e22cf0fa034bdaf76722aff878 Mon Sep 17 00:00:00 2001
From: Doug Bunting <6431421+dougbu@users.noreply.github.com>
Date: Sat, 12 Nov 2022 16:24:37 -0800
Subject: [PATCH 1/3] Use .NET SDK in NetCore.Test project - for now, unable to
target `netcoreapp2.1` in NetCore.Test project - Microsoft.Net.Http is not
compatible - System.Net.Http types have different identities, causing
compilation failures - switch to use `dotnet vstest` for any .NET Core
assemblies (just one currently) - can use `Xunit` target for all .NET
Framework assemblies - make XunitXml.TestLogger available for .NET Core App
testing - use above test logger in repo-level testing - integrate w/
tests that use the `Xunit` target - don't import from xunit.msbuild.runner
when targeting .NET Core; not needed - add `$(CopyLocalLockFileAssemblies)`
to these (now both .NET SDK) test projects - xUnit assemblies were not
copied (when they should have been) w/o this
---
Runtime.msbuild | 21 +-
RuntimePortable.sln | 2 +-
packages/repositories.config | 1 -
test/Directory.Build.props | 2 +-
test/Directory.Build.targets | 3 +-
...em.Net.Http.Formatting.NetCore.Test.csproj | 378 ++++--------------
.../app.config | 11 -
.../packages.config | 17 -
...et.Http.Formatting.NetStandard.Test.csproj | 12 +-
9 files changed, 99 insertions(+), 348 deletions(-)
delete mode 100644 test/System.Net.Http.Formatting.NetCore.Test/app.config
delete mode 100644 test/System.Net.Http.Formatting.NetCore.Test/packages.config
diff --git a/Runtime.msbuild b/Runtime.msbuild
index 5862d38b4..33d946337 100644
--- a/Runtime.msbuild
+++ b/Runtime.msbuild
@@ -102,11 +102,17 @@
<_TestDLLsXunit Include="bin\$(Configuration)\test\*.Test.dll" />
- <_TestDLLsXunit Include="bin\$(Configuration)\test\*.Test.*.dll" />
- <_TestDLLsXunit Include="bin\$(Configuration)\Test\NetCore\*.Test.dll" Condition="'$(BuildPortable)' == 'true'" />
+ <_TestDLLsXunit Include="bin\$(Configuration)\test\*\net4*\*.Test.dll" Condition="'$(BuildPortable)' == 'true'" />
<_XunitProject Include="tools\WebStack.xunit.targets">
TestAssembly=%(_TestDLLsXunit.FullPath);XmlPath=$(TestResultsDirectory)%(_TestDLLsXunit.FileName)-XunitResults.xml
+
+ <_VSTestDLLs Include="bin\$(Configuration)\test\*\netcoreapp*\*.Test.dll" />
+
+
+ <_VSTestDLLs>
+ $(TestResultsDirectory)%(FileName)-NetCoreApp-XunitResults.xml
+
@@ -117,12 +123,11 @@
-
-
+
+
+
diff --git a/RuntimePortable.sln b/RuntimePortable.sln
index f20623fd4..103a46009 100644
--- a/RuntimePortable.sln
+++ b/RuntimePortable.sln
@@ -11,7 +11,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.TestCommon", "tes
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Net.Http.Formatting.NetCore", "src\System.Net.Http.Formatting.NetCore\System.Net.Http.Formatting.NetCore.csproj", "{C7060639-719B-4BD2-8A37-2F146B5A0668}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Net.Http.Formatting.NetCore.Test", "test\System.Net.Http.Formatting.NetCore.Test\System.Net.Http.Formatting.NetCore.Test.csproj", "{8DA61DAC-FF7E-4CA1-93A0-6148DB66FD08}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Net.Http.Formatting.NetCore.Test", "test\System.Net.Http.Formatting.NetCore.Test\System.Net.Http.Formatting.NetCore.Test.csproj", "{8DA61DAC-FF7E-4CA1-93A0-6148DB66FD08}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "System.Net.Http.Formatting.NetStandard", "src\System.Net.Http.Formatting.NetStandard\System.Net.Http.Formatting.NetStandard.csproj", "{636CA76A-C85C-42E2-B4AA-88046279B3CA}"
EndProject
diff --git a/packages/repositories.config b/packages/repositories.config
index 8bede8eeb..c507a7041 100644
--- a/packages/repositories.config
+++ b/packages/repositories.config
@@ -21,7 +21,6 @@
-
diff --git a/test/Directory.Build.props b/test/Directory.Build.props
index 8dc298fd2..a549ec8a8 100644
--- a/test/Directory.Build.props
+++ b/test/Directory.Build.props
@@ -4,6 +4,6 @@
false
true
- v4.5.2
+ v4.5.2
diff --git a/test/Directory.Build.targets b/test/Directory.Build.targets
index 54ff85834..b1167ac05 100644
--- a/test/Directory.Build.targets
+++ b/test/Directory.Build.targets
@@ -1,6 +1,7 @@
-
+
diff --git a/test/System.Net.Http.Formatting.NetCore.Test/System.Net.Http.Formatting.NetCore.Test.csproj b/test/System.Net.Http.Formatting.NetCore.Test/System.Net.Http.Formatting.NetCore.Test.csproj
index 7aecee20d..d60e9a90c 100644
--- a/test/System.Net.Http.Formatting.NetCore.Test/System.Net.Http.Formatting.NetCore.Test.csproj
+++ b/test/System.Net.Http.Formatting.NetCore.Test/System.Net.Http.Formatting.NetCore.Test.csproj
@@ -1,314 +1,87 @@
-
-
-
-
+
- {8DA61DAC-FF7E-4CA1-93A0-6148DB66FD08}
- Library
- Properties
+ net462
System.Net.Http
System.Net.Http.Formatting.NetCore.Test
..\..\bin\$(Configuration)\Test\NetCore\
+ $(Configurations);CodeAnalysis
+ false
$(DefineConstants);NETFX_CORE
+ true
-
- ..\..\packages\Castle.Core.4.2.1\lib\net45\Castle.Core.dll
- True
-
-
- ..\..\packages\Moq.4.7.142\lib\net45\Moq.dll
- True
-
-
- ..\..\packages\Newtonsoft.Json.13.0.1\lib\net45\Newtonsoft.Json.dll
- True
-
-
-
-
-
-
- ..\..\packages\Microsoft.Net.Http.2.2.13\lib\net45\System.Net.Http.Extensions.dll
-
-
- ..\..\packages\Microsoft.Net.Http.2.2.13\lib\net45\System.Net.Http.Primitives.dll
-
-
-
-
-
-
- ..\..\packages\xunit.abstractions.2.0.1\lib\net35\xunit.abstractions.dll
- True
-
-
- ..\..\packages\xunit.assert.2.3.0\lib\netstandard1.1\xunit.assert.dll
- True
-
-
- ..\..\packages\xunit.extensibility.core.2.3.0\lib\netstandard1.1\xunit.core.dll
- True
-
-
- ..\..\packages\xunit.extensibility.execution.2.3.0\lib\net452\xunit.execution.desktop.dll
- True
-
+
+
+
+
+ all
+ runtime; build; native; contentfiles; analyzers
+
+
+
+
+
+
-
- False
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
- DataSets\Types\DerivedFormUrlEncodedMediaTypeFormatter.cs
-
-
- Formatting\BsonMediaTypeFormatterTests.cs
-
-
- Internal\FormDataCollectionTests.cs
-
-
- Formatting\FormUrlEncodedFromContentTests.cs
-
-
- Formatting\FormUrlEncodedFromUriQueryTests.cs
-
-
- Internal\FormUrlEncodedJsonTests.cs
-
-
- Formatting\FormUrlEncodedMediaTypeFormatterTests.cs
-
-
- Formatting\JsonNetSerializationTest.cs
-
-
- Formatting\JsonNetValidationTest.cs
-
-
- Internal\FormUrlEncodedParserTests.cs
-
-
- HttpContentFormDataExtensionsTest.cs
-
-
- HttpValueCollectionTest.cs
-
-
- Internal\ReadOnlyStreamWithEncodingPreambleTest.cs
-
-
- MimeBodyPartTest.cs
-
-
- HttpHeaderExtensionsTest.cs
-
-
- HttpUnsortedResponseTest.cs
-
-
- HttpUnsortedRequestTest.cs
-
-
- SFormatting\tringComparisonHelperTest.cs
-
-
- Mocks\MockAsyncCallback.cs
-
-
- Mocks\MockCompletedAsyncResult.cs
-
-
- HttpClientFactoryTest.cs
-
-
- Handlers\ProgressContentTest.cs
-
-
- Handlers\ProgressStreamTest.cs
-
-
- Handlers\HttpProgressEventArgsTest.cs
-
-
- MultipartRelatedStreamProviderTests.cs
-
-
- MultipartStreamProviderTestBase.cs
-
-
- MultipartFileDataTest.cs
-
-
- DataSets\Types\DataContractEnum.cs
-
-
- DataSets\Types\DataContractType.cs
-
-
- DataSets\Types\DerivedDataContractType.cs
-
-
- DataSets\Types\DerivedJsonMediaTypeFormatter.cs
-
-
- DataSets\Types\DerivedWcfPocoType.cs
-
-
- DataSets\Types\DerivedXmlMediaTypeFormatter.cs
-
-
- DataSets\Types\DerivedXmlSerializableType.cs
-
-
- DataSets\HttpTestData.cs
-
-
- DataSets\Types\INotJsonSerializable.cs
-
-
- DataSets\Types\WcfPocoType.cs
-
-
- DataSets\Types\XmlSerializableType.cs
-
-
- Formatting\SerializerConsistencyTests.cs
-
-
- Formatting\XmlSerializerMediaTypeFormatterTests.cs
-
-
- Formatting\MediaTypeFormatterTestBase.cs
-
-
- HttpClientExtensionsTest.cs
-
-
- Internal\AsyncResultTest.cs
-
-
- Internal\DelegatingStreamTest.cs
-
-
- Mocks\MockDelegatingHandler.cs
-
-
- Mocks\MockDelegatingStream.cs
-
-
- Mocks\MockProgressEventHandler.cs
-
-
- Mocks\TestableHttpMessageHandler.cs
-
-
- UriExtensionsTests.cs
-
-
- UriQueryDataSet.cs
-
-
- FormattingUtilitiesTests.cs
-
-
- Formatting\JsonMediaTypeFormatterTests.cs
-
-
- Formatting\MediaTypeConstantsTests.cs
-
-
- Formatting\MediaTypeFormatterCollectionTests.cs
-
-
- Formatting\MediaTypeFormatterTests.cs
-
-
- Formatting\MediaTypeHeaderValueExtensionsTests.cs
-
-
- Formatting\ParsedMediaTypeHeaderValueTests.cs
-
-
- Formatting\XmlMediaTypeFormatterTests.cs
-
-
- HttpContentMessageExtensionsTests.cs
-
-
- HttpContentMultipartExtensionsTests.cs
-
-
- HttpMessageContentTests.cs
-
-
- Formatting\Parsers\HttpRequestHeaderParserTests.cs
-
-
- Formatting\Parsers\HttpRequestLineParserTests.cs
-
-
- Formatting\Parsers\HttpResponseHeaderParserTests.cs
-
-
- Formatting\Parsers\HttpStatusLineParserTests.cs
-
-
- Formatting\Parsers\InternetMessageFormatHeaderParserTests.cs
-
-
- Formatting\Parsers\MimeMultipartParserTests.cs
-
-
- MultipartMemoryStreamProviderTests.cs
-
-
- ObjectContentOfTTests.cs
-
-
- ObjectContentTests.cs
-
-
- ParserData.cs
-
-
- Mocks\MockHttpContent.cs
-
-
- Mocks\MockMediaTypeFormatter.cs
-
-
- HttpContentExtensionsTest.cs
-
-
- PushStreamContentTest.cs
-
-
- ProgressMessageHandlerTest.cs
-
-
- ConcurrentDictionaryTests.cs
-
-
-
-
- {C7060639-719B-4BD2-8A37-2F146B5A0668}
- System.Net.Http.Formatting
-
-
- {FCCC4CB7-BAF7-4A57-9F89-E5766FE536C0}
- Microsoft.TestCommon
-
-
-
-
-
- Designer
-
+
+
@@ -316,17 +89,12 @@
-
-
This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.
-
-
\ No newline at end of file
+
diff --git a/test/System.Net.Http.Formatting.NetCore.Test/app.config b/test/System.Net.Http.Formatting.NetCore.Test/app.config
deleted file mode 100644
index d0071f86e..000000000
--- a/test/System.Net.Http.Formatting.NetCore.Test/app.config
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/test/System.Net.Http.Formatting.NetCore.Test/packages.config b/test/System.Net.Http.Formatting.NetCore.Test/packages.config
deleted file mode 100644
index 88bf30ad7..000000000
--- a/test/System.Net.Http.Formatting.NetCore.Test/packages.config
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/test/System.Net.Http.Formatting.NetStandard.Test/System.Net.Http.Formatting.NetStandard.Test.csproj b/test/System.Net.Http.Formatting.NetStandard.Test/System.Net.Http.Formatting.NetStandard.Test.csproj
index 0b89690d5..64d06cf7e 100644
--- a/test/System.Net.Http.Formatting.NetStandard.Test/System.Net.Http.Formatting.NetStandard.Test.csproj
+++ b/test/System.Net.Http.Formatting.NetStandard.Test/System.Net.Http.Formatting.NetStandard.Test.csproj
@@ -1,17 +1,23 @@
- netcoreapp2.1;net461
+ netcoreapp2.1;net462
System.Net.Http
System.Net.Http.Formatting.NetStandard.Test
- ..\..\bin\$(Configuration)\Test\
+ ..\..\bin\$(Configuration)\Test\NetStandard\
$(Configurations);CodeAnalysis
false
+ true
+
-
+
+ all
+ runtime; build; native; contentfiles; analyzers
+
+
From 8ee67e0a48993e70535a40579c96223a5ccbec22 Mon Sep 17 00:00:00 2001
From: Doug Bunting <6431421+dougbu@users.noreply.github.com>
Date: Sun, 7 Aug 2022 15:32:38 -0700
Subject: [PATCH 2/3] Use .NET SDK in Microsoft.TestCommon - allows reference
in .NET SDK test projects
---
RuntimePortable.sln | 2 +-
packages/repositories.config | 1 -
test/Directory.Build.props | 5 +-
.../ExceptionAssertions.cs | 2 +
.../Microsoft.TestCommon.csproj | 139 +++---------------
test/Microsoft.TestCommon/packages.config | 8 -
.../Internal/HttpValueCollectionTest.cs | 2 +
7 files changed, 26 insertions(+), 133 deletions(-)
delete mode 100644 test/Microsoft.TestCommon/packages.config
diff --git a/RuntimePortable.sln b/RuntimePortable.sln
index 103a46009..bbe26d3cf 100644
--- a/RuntimePortable.sln
+++ b/RuntimePortable.sln
@@ -7,7 +7,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A9836F9E-6DB
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C40883CD-366D-4534-8B58-3EA0D13136DF}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.TestCommon", "test\Microsoft.TestCommon\Microsoft.TestCommon.csproj", "{FCCC4CB7-BAF7-4A57-9F89-E5766FE536C0}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.TestCommon", "test\Microsoft.TestCommon\Microsoft.TestCommon.csproj", "{FCCC4CB7-BAF7-4A57-9F89-E5766FE536C0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "System.Net.Http.Formatting.NetCore", "src\System.Net.Http.Formatting.NetCore\System.Net.Http.Formatting.NetCore.csproj", "{C7060639-719B-4BD2-8A37-2F146B5A0668}"
EndProject
diff --git a/packages/repositories.config b/packages/repositories.config
index c507a7041..22e5c94b2 100644
--- a/packages/repositories.config
+++ b/packages/repositories.config
@@ -17,7 +17,6 @@
-
diff --git a/test/Directory.Build.props b/test/Directory.Build.props
index a549ec8a8..64681b2ef 100644
--- a/test/Directory.Build.props
+++ b/test/Directory.Build.props
@@ -4,6 +4,9 @@
false
true
- v4.5.2
+ v4.5.2
diff --git a/test/Microsoft.TestCommon/ExceptionAssertions.cs b/test/Microsoft.TestCommon/ExceptionAssertions.cs
index 1d21f04f0..11b36e9e6 100644
--- a/test/Microsoft.TestCommon/ExceptionAssertions.cs
+++ b/test/Microsoft.TestCommon/ExceptionAssertions.cs
@@ -466,6 +466,7 @@ public static ArgumentOutOfRangeException ThrowsArgumentLessThanOrEqualTo(Action
String.Format(CultureReplacer.DefaultCulture, "Value must be less than or equal to {0}.", maxValue), false, actualValue);
}
+#if !NETCOREAPP
///
/// Verifies that the code throws an HttpException (or optionally any exception which derives from it).
///
@@ -481,6 +482,7 @@ public static HttpException ThrowsHttpException(Action testCode, string exceptio
Equal(httpCode, ex.GetHttpCode());
return ex;
}
+#endif
///
/// Verifies that the code throws an InvalidEnumArgumentException (or optionally any exception which derives from it).
diff --git a/test/Microsoft.TestCommon/Microsoft.TestCommon.csproj b/test/Microsoft.TestCommon/Microsoft.TestCommon.csproj
index 73887c60e..dae43e747 100644
--- a/test/Microsoft.TestCommon/Microsoft.TestCommon.csproj
+++ b/test/Microsoft.TestCommon/Microsoft.TestCommon.csproj
@@ -1,128 +1,23 @@
-
-
+
- {FCCC4CB7-BAF7-4A57-9F89-E5766FE536C0}
- Library
- Properties
- Microsoft.TestCommon
- Microsoft.TestCommon
- false
+ netcoreapp2.1;net452
..\..\bin\$(Configuration)\Test\
- false
- false
- true
- false
+ $(Configurations);CodeAnalysis
+ false
-
-
-
-
-
-
-
-
-
-
- ..\..\packages\xunit.abstractions.2.0.1\lib\net35\xunit.abstractions.dll
- True
-
-
- ..\..\packages\xunit.assert.2.3.0\lib\netstandard1.1\xunit.assert.dll
- True
-
-
- ..\..\packages\xunit.extensibility.core.2.3.0\lib\netstandard1.1\xunit.core.dll
- True
-
-
- ..\..\packages\xunit.extensibility.execution.2.3.0\lib\net452\xunit.execution.desktop.dll
- True
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Code
-
-
-
-
-
-
-
- Code
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PreserveNewest
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
+
diff --git a/test/Microsoft.TestCommon/packages.config b/test/Microsoft.TestCommon/packages.config
deleted file mode 100644
index d6bfcf037..000000000
--- a/test/Microsoft.TestCommon/packages.config
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/test/System.Net.Http.Formatting.Test/Internal/HttpValueCollectionTest.cs b/test/System.Net.Http.Formatting.Test/Internal/HttpValueCollectionTest.cs
index 626c655aa..03b5aadf0 100644
--- a/test/System.Net.Http.Formatting.Test/Internal/HttpValueCollectionTest.cs
+++ b/test/System.Net.Http.Formatting.Test/Internal/HttpValueCollectionTest.cs
@@ -27,10 +27,12 @@ private static HttpValueCollection CreateInstance()
#endif
}
+#if !NETCOREAPP
private static void RunInIsolation(Action action)
{
AppDomainUtils.RunInSeparateAppDomain(action);
}
+#endif
public static TheoryDataSet>> KeyValuePairs
{
From 82f520bf4c65eded9b7d2046426ae30813fdfe1c Mon Sep 17 00:00:00 2001
From: Doug Bunting <6431421+dougbu@users.noreply.github.com>
Date: Tue, 29 Nov 2022 21:57:58 -0800
Subject: [PATCH 3/3] Create general `TestAssembly` target - rename
WebStack.xunit.targets -> WebStack.testing.targets - rename `Xunit` target ->
`TestAssembly` - move `dotnet vstest` use into new target - handle exit
codes more consistently
---
Runtime.msbuild | 30 +++++++++----------
...xunit.targets => WebStack.testing.targets} | 13 ++++++--
2 files changed, 25 insertions(+), 18 deletions(-)
rename tools/{WebStack.xunit.targets => WebStack.testing.targets} (51%)
diff --git a/Runtime.msbuild b/Runtime.msbuild
index 33d946337..d53e2e46d 100644
--- a/Runtime.msbuild
+++ b/Runtime.msbuild
@@ -102,32 +102,30 @@
<_TestDLLsXunit Include="bin\$(Configuration)\test\*.Test.dll" />
- <_TestDLLsXunit Include="bin\$(Configuration)\test\*\net4*\*.Test.dll" Condition="'$(BuildPortable)' == 'true'" />
- <_XunitProject Include="tools\WebStack.xunit.targets">
- TestAssembly=%(_TestDLLsXunit.FullPath);XmlPath=$(TestResultsDirectory)%(_TestDLLsXunit.FileName)-XunitResults.xml
+ <_TestDLLsXunit Include="bin\$(Configuration)\test\*\net4*\*.Test.dll"
+ Condition=" '$(BuildPortable)' == 'true' " />
+ <_XunitProject Include="tools\WebStack.testing.targets">
+ TestAssembly=%(_TestDLLsXunit.FullPath);
+ XmlPath=$(TestResultsDirectory)%(_TestDLLsXunit.FileName)-XunitResults.xml
- <_VSTestDLLs Include="bin\$(Configuration)\test\*\netcoreapp*\*.Test.dll" />
-
-
- <_VSTestDLLs>
- $(TestResultsDirectory)%(FileName)-NetCoreApp-XunitResults.xml
-
+ <_VSTestDLLs Include="bin\$(Configuration)\test\*\netcoreapp*\*.Test.dll"
+ Condition=" '$(BuildPortable)' == 'true' "/>
+ <_XunitProject Include="tools\WebStack.testing.targets"
+ Condition=" '$(BuildPortable)' == 'true' ">
+ TestAssembly=%(_VSTestDLLs.FullPath);
+ XmlPath=$(TestResultsDirectory)%(_VSTestDLLs.FileName)-NetCoreApp-XunitResults.xml;
+ UseVSTest=true
+
-
+
-
-
-
-
diff --git a/tools/WebStack.xunit.targets b/tools/WebStack.testing.targets
similarity index 51%
rename from tools/WebStack.xunit.targets
rename to tools/WebStack.testing.targets
index d11eaee74..b802862a0 100644
--- a/tools/WebStack.xunit.targets
+++ b/tools/WebStack.testing.targets
@@ -5,10 +5,19 @@
-->
-
-
+
+
+
+
+
<_ExitCodes Include="$(TestAssembly)" Code="$(_ExitCode)" />