Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[msbuild/tests] Use 'dotnet test' for the MSBuild tests (take 2). #21363

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions msbuild/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -546,13 +546,8 @@ install-local:: $(MSBUILD_PRODUCTS)
@echo Targets files are valid XML
@touch $@

test run-test: run-test-ios run-test-mac

run-test-ios:
$(MAKE) -C $(TOP)/tests test-ios-tasks

run-test-mac:
$(MAKE) -C $(TOP)/tests run-mac-msbuild
test run-test run-tests tests run-tests-msbuild:
$(Q) $(MAKE) -C $(TOP)/tests run-tests-msbuild

clean-local::
git clean -xfdq
Expand Down
3 changes: 0 additions & 3 deletions msbuild/Xamarin.Mac.Tasks/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,3 @@
[assembly: AssemblyProductAttribute ("Xamarin.Mac.Tasks")]
[assembly: AssemblyTitleAttribute ("Xamarin.Mac.Tasks")]
[assembly: AssemblyVersionAttribute (VersionConstants.XamarinMacVersion)]

[assembly: InternalsVisibleTo ("Xamarin.MacDev.Tasks.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")]
[assembly: InternalsVisibleTo ("Xamarin.MacDev.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")]
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ public override bool Execute ()
for (var i = 1; i < all.Length; i++) {
var nextMetadata = all [i].CloneCustomMetadataToDictionary ();
if (nextMetadata.Count != firstMetadata.Count) {
Log.LogWarning (MSBStrings.W7095, /* Code signing has been requested multiple times for '{0}', with different metadata. The metadata for one are: '{1}', while the metadata for the other are: '{2}' */ group.Key, string.Join (", ", firstMetadata.Keys), string.Join (", ", nextMetadata.Keys));
Log.LogWarning (MSBStrings.W7095, /* Code signing has been requested multiple times for '{0}', with different metadata. The metadata for one are: '{1}', while the metadata for the other are: '{2}' */ group.Key, string.Join (", ", firstMetadata.Keys.OrderBy (v => v)), string.Join (", ", nextMetadata.Keys.OrderBy (v => v)));
} else {
foreach (var kvp in firstMetadata) {
if (!nextMetadata.TryGetValue (kvp.Key, out var nextValue)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -444,7 +444,7 @@ public static bool TryResolveXCFramework (TaskLoggingHelper log, string targetFr
/// <param name="architectures">The target architectures</param>
/// <param name="frameworkPath">A relative path to the resolved native library within the xcframework.</param>
/// <returns>True if a native library was successfully found. Otherwise false, and an error will have been printed to the log.</returns>
internal static bool TryResolveXCFramework (TaskLoggingHelper log, PDictionary plist, string xcframeworkPath, string targetFrameworkMoniker, bool isSimulator, string architectures, [NotNullWhen (true)] out string? nativeLibraryPath)
public static bool TryResolveXCFramework (TaskLoggingHelper log, PDictionary plist, string xcframeworkPath, string targetFrameworkMoniker, bool isSimulator, string architectures, [NotNullWhen (true)] out string? nativeLibraryPath)
{
nativeLibraryPath = null;
var platform = PlatformFrameworkHelper.GetFramework (targetFrameworkMoniker);
Expand Down
3 changes: 0 additions & 3 deletions msbuild/Xamarin.iOS.Tasks/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,3 @@
[assembly: AssemblyProductAttribute ("Xamarin.iOS.Tasks")]
[assembly: AssemblyTitleAttribute ("Xamarin.iOS.Tasks")]
[assembly: AssemblyVersionAttribute (VersionConstants.XamarinIOSVersion)]

[assembly: InternalsVisibleTo ("Xamarin.MacDev.Tasks.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")]
[assembly: InternalsVisibleTo ("Xamarin.MacDev.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000011000000438ac2a5acfbf16cbd2b2b47a62762f273df9cb2795ceccdf77d10bf508e69e7a362ea7a45455bbf3ac955e1f2e2814f144e5d817efc4c6502cc012df310783348304e3ae38573c6d658c234025821fda87a0be8a0d504df564e2c93b2b878925f42503e9d54dfef9f9586d9e6f38a305769587b1de01f6c0410328b2c9733db")]
16 changes: 10 additions & 6 deletions tests/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -214,18 +214,22 @@ killall:
@killall "iOS Simulator" >/dev/null 2>&1 || true
@killall Touch.Server >/dev/null 2>&1 || true

NUNIT_MSBUILD_DIR=$(TOP)/packages/NUnit.Runners.2.6.4/tools/lib
test-ios-tasks: test-macdev-tests test-macdev-tasks
test-msbuild run-tests-msbuild:
$(MAKE) test-macdev-tests test-macdev-tasks

# Example TEST_FILTER:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is such an awesome thing to add to the makefiles

# TEST_FILTER="--filter FullyQualifiedName~BuildMyCocoaApp"
# Docs: https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-test#filter-option-details
test-macdev-tests: export MSBUILD_EXE_PATH=
test-macdev-tests: verify-system-vsmac-xcode-match
$(Q) $(DOTNET) build "/bl:[email protected]" $(TOP)/tests/msbuild/Xamarin.MacDev.Tests/Xamarin.MacDev.Tests.csproj /p:Configuration=Debug $(DOTNET_BUILD_VERBOSITY)
cd $(TOP)/tests/msbuild/Xamarin.MacDev.Tests && $(SYSTEM_XIBUILD) -t -- $(abspath $(TOP)/tools/nunit3-console-3.11.1) $(abspath $(TOP)/tests/msbuild/Xamarin.MacDev.Tests/bin/Debug/net472/Xamarin.MacDev.Tests.dll) "--result=$(abspath $(CURDIR)/TestResults_Xamarin.MacDev.Tests.xml);format=nunit2" -labels=After $(TEST_FIXTURE)
$(Q) $(DOTNET) test $(TOP)/tests/msbuild/Xamarin.MacDev.Tests/Xamarin.MacDev.Tests.csproj $(TEST_FILTER)

# Example TEST_FILTER:
# TEST_FILTER="--filter FullyQualifiedName~BuildMyCocoaApp"
# Docs: https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-test#filter-option-details
test-macdev-tasks: export MSBUILD_EXE_PATH=
test-macdev-tasks: verify-system-vsmac-xcode-match
$(Q) $(DOTNET) build "/bl:[email protected]" $(TOP)/tests/msbuild/Xamarin.MacDev.Tasks.Tests/Xamarin.MacDev.Tasks.Tests.csproj /p:Configuration=Debug $(DOTNET_BUILD_VERBOSITY)
cd $(TOP)/tests/msbuild/Xamarin.MacDev.Tasks.Tests && $(SYSTEM_XIBUILD) -t -- $(abspath $(TOP)/tools/nunit3-console-3.11.1) $(abspath $(TOP)/tests/msbuild/Xamarin.MacDev.Tasks.Tests/bin/Debug/net472/Xamarin.MacDev.Tasks.Tests.dll) "--result=$(abspath $(CURDIR)/TestResults_Xamarin.MacDev.Tasks.Tests.xml)" -labels=After $(TEST_FIXTURE)
$(Q) $(DOTNET) test $(TOP)/tests/msbuild/Xamarin.MacDev.Tasks.Tests/Xamarin.MacDev.Tasks.Tests.csproj $(TEST_FILTER)

mac-test-package.zip:
ifdef INCLUDE_MAC
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ CompileAppManifest CreateTask (string? tmpdir = null, ApplePlatform platform = A
task.AssemblyName = "AssemblyName";
task.AppBundleName = "AppBundleName";
task.CompiledAppManifest = new TaskItem (Path.Combine (tmpdir, "TemporaryAppManifest.plist"));
task.DefaultSdkVersion = Sdks.GetAppleSdk (platform).GetInstalledSdkVersions (false).First ().ToString ();
task.SdkVersion = task.DefaultSdkVersion;
task.DefaultSdkVersion = Sdks.GetAppleSdk (platform).GetInstalledSdkVersions (false).First ().ToString ()!;
task.SdkVersion = task.DefaultSdkVersion ?? string.Empty;
task.TargetFrameworkMoniker = TargetFramework.GetTargetFramework (platform, true).ToString ();

return task;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ CustomCompileEntitlements CreateEntitlementsTask (out string compiledEntitlement
task.AppBundleDir = AppBundlePath;
task.BundleIdentifier = "com.xamarin.MySingleView";
task.CompiledEntitlements = new TaskItem (Path.Combine (MonoTouchProjectObjPath, "Entitlements.xcent"));
task.Entitlements = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location), "Resources", "Entitlements.plist");
task.ProvisioningProfile = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location), "Resources", "profile.mobileprovision");
task.Entitlements = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location)!, "Resources", "Entitlements.plist");
task.ProvisioningProfile = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location)!, "Resources", "profile.mobileprovision");
task.SdkPlatform = "iPhoneOS";
task.SdkVersion = "6.1";
task.TargetFrameworkMoniker = "Xamarin.iOS,v1.0";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@ public void DuplicatedWithDifferentMetadata (ApplePlatform platform, bool isDotN
Assert.AreEqual (3, Engine.Logger.WarningsEvents.Count, "Warning Count");
Assert.AreEqual ("Code signing has been requested multiple times for 'Bundle.app/Contents/MonoBundle/createdump', with different metadata. The metadata 'OnlyIn1=true' has been set for one item, but not the other.", Engine.Logger.WarningsEvents [0].Message, "Message #0");
Assert.AreEqual ("Code signing has been requested multiple times for 'Bundle.app/Contents/MonoBundle/createdump', with different metadata. The metadata 'InOneAndTwoWithDifferentValues' has different values for each item (once it's '1', another time it's '2').", Engine.Logger.WarningsEvents [1].Message, "Message #1");
Assert.AreEqual ("Code signing has been requested multiple times for 'Bundle.app/Contents/MonoBundle/createdump', with different metadata. The metadata for one are: 'RequireCodeSigning, OnlyIn1, InOneAndTwoWithDifferentValues, CodesignStampFile', while the metadata for the other are: 'RequireCodeSigning, CodesignStampFile'", Engine.Logger.WarningsEvents [2].Message, "Message #2");
Assert.AreEqual ("Code signing has been requested multiple times for 'Bundle.app/Contents/MonoBundle/createdump', with different metadata. The metadata for one are: 'CodesignStampFile, InOneAndTwoWithDifferentValues, OnlyIn1, RequireCodeSigning', while the metadata for the other are: 'CodesignStampFile, RequireCodeSigning'", Engine.Logger.WarningsEvents [2].Message, "Message #2");

VerifyCodesigningResults (infos, task.OutputCodesignItems, platform);
} finally {
Expand Down Expand Up @@ -532,7 +532,7 @@ void VerifyCodesigningResults (CodesignInfo [] infos, ITaskItem [] outputCodesig
var metadata = item.GetMetadata (kvp.Key);
if (metadata == string.Empty && kvp.Value != string.Empty) {
failures.Add ($"Item '{info.ItemSpec}': Expected metadata '{kvp.Key}' not found (with value '{kvp.Value}').");
} else if (!string.Equals (metadata, kvp.Value)) {
} else if (!string.Equals (metadata, kvp.Value, StringComparison.Ordinal)) {
failures.Add ($"Item '{info.ItemSpec}': Expected value '{kvp.Value}' for metadata '{kvp.Key}', but got '{metadata}' instead.\nExpected: {kvp.Value}\nActual: {metadata}");
}
}
Expand Down Expand Up @@ -587,7 +587,7 @@ void Touch (string root, params string [] files)
if (file.EndsWith (".appex", StringComparison.OrdinalIgnoreCase) || file.EndsWith (".app", StringComparison.OrdinalIgnoreCase)) {
Directory.CreateDirectory (f);
} else {
Directory.CreateDirectory (Path.GetDirectoryName (file));
Directory.CreateDirectory (Path.GetDirectoryName (file)!);
File.WriteAllText (file, string.Empty);
}
}
Expand Down Expand Up @@ -637,7 +637,7 @@ public static Dictionary<string, string> CopyCustomMetadata (this ITaskItem self
{
var rv = new Dictionary<string, string> ();
foreach (DictionaryEntry de in self.CloneCustomMetadata ()) {
rv [(string) de.Key] = (string) de.Value;
rv [(string) de.Key!] = (string) de.Value!;
}
return rv;
}
Expand Down
107 changes: 0 additions & 107 deletions tests/msbuild/Xamarin.MacDev.Tasks.Tests/TaskTests/MTouchTaskTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -206,97 +206,13 @@ public void BuildEntitlementFlagsTest ()
Assert.That (args, Does.Contain ("Entitlements.plist"), "#2");
}

[Test]
public void ReferenceFrameworkFileResolution_WhenReceivedReferencePathExists ()
{
using (var sdk = new TempSdk ()) {
Task.TargetFrameworkMoniker = "MonoTouch,v1.0";

var expectedPath = Path.Combine (Cache.CreateTemporaryDirectory (), "tmpfile");

Task.References = new [] { new TaskItem (expectedPath, new Dictionary<string, string> { { "FrameworkFile", "true" } }) };

var args = Task.GenerateCommandLineCommands ();

if (Environment.OSVersion.Platform == PlatformID.Win32NT)
// In Windows, the path slashes are escaped.
expectedPath = expectedPath.Replace ("\\", "\\\\");

Assert.IsTrue (Task.ResponseFile.Contains (expectedPath));
}
}

[Test]
public void ResponseFileTest ()
{
var args = Task.GenerateCommandLineCommands ();
Assert.IsTrue (args.Contains ($"@{Task.ResponseFilePath}"), "#@response-file");
}

[TestCase ("Xamarin.iOS,v1.0", "Xamarin.iOS")]
public void ReferenceFrameworkFileResolution_WhenFacadeFileExists (string targetFrameworkMoniker, string frameworkDir)
{
using (var sdk = new TempSdk ()) {
Task.TargetFrameworkMoniker = targetFrameworkMoniker;
var expectedPath = Path.Combine (Sdks.XamIOS.LibDir, "mono", frameworkDir, "Facades", "System.Collections.dll");
Directory.CreateDirectory (Path.GetDirectoryName (expectedPath));
File.WriteAllText (expectedPath, "");

Task.References = new [] { new TaskItem ("System.Collections.dll", new Dictionary<string, string> { { "FrameworkFile", "true" } }) };

var args = Task.GenerateCommandLineCommands ();

if (Environment.OSVersion.Platform == PlatformID.Win32NT)
// In Windows, the path slashes are escaped.
expectedPath = expectedPath.Replace ("\\", "\\\\");

Assert.IsTrue (Task.ResponseFile.Contains (expectedPath), string.Format (
@"Failed to resolve facade assembly to the Sdk path.
Expected path:{0}

Actual args:{1}", expectedPath, Task.ResponseFile));
}
}

[TestCase ("Xamarin.iOS,v1.0", "Xamarin.iOS")]
public void ReferenceFrameworkFileResolution_WhenFrameworkFileExists (string targetFrameworkMoniker, string frameworkDir)
{
using (var sdk = new TempSdk ()) {
Task.TargetFrameworkMoniker = targetFrameworkMoniker;
var expectedPath = Path.Combine (Sdks.XamIOS.LibDir, "mono", frameworkDir, "System.Collections.dll");
Directory.CreateDirectory (Path.GetDirectoryName (expectedPath));
File.WriteAllText (expectedPath, "");

Task.References = new [] { new TaskItem ("System.Collections.dll", new Dictionary<string, string> { { "FrameworkFile", "true" } }) };

var args = Task.GenerateCommandLineCommands ();

if (Environment.OSVersion.Platform == PlatformID.Win32NT)
// In Windows, the path slashes are escaped.
expectedPath = expectedPath.Replace ("\\", "\\\\");

Assert.IsTrue (Task.ResponseFile.Contains (expectedPath), string.Format (
@"Failed to resolve facade assembly to the Sdk path.
Expected path:{0}

Actual args:{1}", expectedPath, Task.ResponseFile));
}
}

[TestCase ("Xamarin.iOS,v1.0", "Xamarin.iOS")]
public void ReferenceFrameworkFileResolution_WhenResolutionFails (string targetFrameworkMoniker, string frameworkDir)
{
using (var sdk = new TempSdk ()) {
Task.TargetFrameworkMoniker = targetFrameworkMoniker;

Task.References = new [] { new TaskItem ("/usr/foo/System.Collections.dll", new Dictionary<string, string> { { "FrameworkFile", "true" } }) };

var args = Task.GenerateCommandLineCommands ();

Assert.IsTrue (Task.ResponseFile.Contains ("/usr/foo/System.Collections.dll"));
}
}

[Test]
public void NativeReference_None ()
{
Expand Down Expand Up @@ -344,28 +260,5 @@ public void NativeReference_Framework ()
// 3 additional files (as we do not duplicate the TaskItem for the native library itself)
Assert.That (items.Count (), Is.EqualTo (3), "framework files");
}

class TempSdk : IDisposable {
MonoTouchSdk sdk;

public TempSdk ()
{
SdkDir = Cache.CreateTemporaryDirectory ();
Directory.CreateDirectory (Path.Combine (SdkDir, "bin"));
File.WriteAllText (Path.Combine (SdkDir, "Version"), "1.0.0.0"); // Fake Version file so that MonoTouchSdk detects this as a real Sdk location.
File.WriteAllText (Path.Combine (SdkDir, "bin", "mtouch"), "echo \"fake mtouch\""); // Fake mtouch binary so that MonoTouchSdk detects this as a real Sdk location.
Directory.CreateDirectory (Path.Combine (SdkDir, "lib"));
sdk = Sdks.XamIOS;

Sdks.XamIOS = new MonoTouchSdk (SdkDir);
}

public string SdkDir { get; private set; }

public void Dispose ()
{
Sdks.XamIOS = sdk;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public void Xcode12_x (string targetFrameworkMoniker, bool isSimulator, string a
// some architecture changes recently, e.g.
// in Xcode 12.1+ watchOS does not have an i386 architecture anymore
// on Xcode 12.2+ you get arm64 for all (iOS, tvOS and watchOS) simulators
var path = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location), "Resources", "xcf-xcode12.2.plist");
var path = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location)!, "Resources", "xcf-xcode12.2.plist");
var plist = PDictionary.FromFile (path)!;
var result = ResolveNativeReferences.TryResolveXCFramework (log, plist, "N/A", targetFrameworkMoniker, isSimulator, architecture, out var frameworkPath);
Assert.AreEqual (result, !string.IsNullOrEmpty (expected), "result");
Expand All @@ -51,7 +51,7 @@ public void Xcode12_x (string targetFrameworkMoniker, bool isSimulator, string a
[TestCase (TargetFramework.Xamarin_WatchOS_1_0_String, true, "i386", "watchos-i386-simulator/XTest.framework/XTest")]
public void PreXcode12 (string targetFrameworkMoniker, bool isSimulator, string architecture, string expected)
{
var path = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location), "Resources", "xcf-prexcode12.plist");
var path = Path.Combine (Path.GetDirectoryName (GetType ().Assembly.Location)!, "Resources", "xcf-prexcode12.plist");
var plist = PDictionary.FromFile (path)!;
var result = ResolveNativeReferences.TryResolveXCFramework (log, plist, "N/A", targetFrameworkMoniker, isSimulator, architecture, out var frameworkPath);
Assert.AreEqual (result, !string.IsNullOrEmpty (expected), "result");
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<TargetFramework>net$(BundledNETCoreAppTargetFrameworkVersion)</TargetFramework>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<DisableTransitiveProjectReferences>true</DisableTransitiveProjectReferences>
<LangVersion>latest</LangVersion>
Expand Down Expand Up @@ -32,12 +32,12 @@
<Reference Include="Xamarin.Localization.MSBuild" HintPath="..\..\..\msbuild\Xamarin.iOS.Tasks\bin\$(Configuration)\netstandard2.0\Xamarin.Localization.MSBuild.dll" />
<PackageReference Include="System.Collections.Immutable" Version="8.0.0" />
<PackageReference Include="NUnit" Version="3.12.0" />
<PackageReference Include="NUnit.ConsoleRunner" Version="3.11.1" />
<PackageReference Include="NUnit.Extension.NUnitV2ResultWriter" Version="3.6.0" />
<PackageReference Include="Microsoft.Build" Version="15.9.20" />
<PackageReference Include="Microsoft.Build.Framework" Version="15.9.20" />
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="15.9.20" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.9.20" />
<PackageReference Include="NUnit3TestAdapter" Version="3.15.1" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.4.1" />
<PackageReference Include="Microsoft.Build" Version="17.11.4" />
<PackageReference Include="Microsoft.Build.Framework" Version="17.11.4" />
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="17.11.4" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="17.11.4" />
</ItemGroup>

<Target Name="BuildTasksAssembly" AfterTargets="BeforeBuild">
Expand All @@ -64,6 +64,9 @@
<Compile Include="..\..\common\ErrorHelper.tests.cs">
<Link>external\ErrorHelper.tests.cs</Link>
</Compile>
<Compile Include="..\..\..\tools\common\StringUtils.cs">
<Link>external\StringUtils.cs</Link>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="Resources\Entitlements.plist">
Expand Down
Loading