Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikayla Hutchinson <m.j.hutchinson@gmail.com>2019-01-13 11:03:02 +0300
committerMikayla Hutchinson <m.j.hutchinson@gmail.com>2019-01-13 11:29:12 +0300
commite17d92257c59ee8685bb46f0c44b48a429ce9bd1 (patch)
treebaf339c9522cae0fe652cc681ade8a6dbb31d6d8
parent15e09661ada184d7effde511fa57cac96f378aae (diff)
Suppress NuGet local copies unless explicitly listed in project
NuGet's PrivateAssets="runtime" does not work, resulting in transitive references local copying their assemblies into every project. This works around that by filtering out all local copies that are not explictly listed. This also makes it much harder to accidentally introduce local copies, which is good as local copies in general are are not desirable due to the way that dlls are loaded by the extension system.
-rw-r--r--main/msbuild/MDBuildTasks.targets65
-rw-r--r--main/msbuild/MDBuildTasks/FilterLocalCopyReferences.cs194
-rw-r--r--main/msbuild/MDBuildTasks/MDBuildTasks.csproj3
-rw-r--r--main/src/addins/AspNet/MonoDevelop.AspNet.csproj7
-rw-r--r--main/src/addins/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft.csproj2
-rw-r--r--main/src/addins/MonoDevelop.Debugger.VSCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol.csproj1
-rw-r--r--main/src/addins/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32.csproj3
-rw-r--r--main/src/addins/MonoDevelop.GtkCore/libsteticui/libsteticui.csproj4
-rw-r--r--main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj18
-rw-r--r--main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring.csproj1
-rw-r--r--main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnit3Runner/NUnit3Runner.csproj5
-rw-r--r--main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnitRunner/NUnitRunner.csproj4
-rw-r--r--main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.csproj6
-rw-r--r--main/src/addins/TextTemplating/MonoDevelop.TextTemplating/MonoDevelop.TextTemplating.csproj1
-rw-r--r--main/src/addins/WindowsPlatform/WindowsAPICodePack/Shell/Shell.csproj1
-rw-r--r--main/src/addins/WindowsPlatform/WindowsPlatform/WindowsPlatform.csproj4
-rw-r--r--main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj82
-rw-r--r--main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj14
-rw-r--r--main/src/core/MonoDevelop.Startup/MonoDevelop.Startup.csproj1
-rw-r--r--main/tests/TestRunner/TestRunner.csproj6
-rw-r--r--main/tests/UnitTests/UnitTests.csproj2
-rw-r--r--main/tests/performance/MonoDevelop.PerformanceTesting/MonoDevelop.PerformanceTesting.csproj1
-rw-r--r--main/tests/ui/MonoDevelop.UserInterfaceTesting/MonoDevelop.UserInterfaceTesting.csproj2
23 files changed, 424 insertions, 3 deletions
diff --git a/main/msbuild/MDBuildTasks.targets b/main/msbuild/MDBuildTasks.targets
index 89e12ee012..66d7feec78 100644
--- a/main/msbuild/MDBuildTasks.targets
+++ b/main/msbuild/MDBuildTasks.targets
@@ -63,6 +63,20 @@
</Task>
</UsingTask>
+ <UsingTask
+ TaskName="FilterLocalCopyReferences"
+ TaskFactory="CodeTaskFactory"
+ AssemblyFile="$(RoslynCodeTaskFactory)"
+ Condition=" '$(RoslynCodeTaskFactory)' != '' ">
+ <!--
+ TaskFactory="RoslynCodeTaskFactory"
+ AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll" >
+ -->
+ <Task>
+ <Code Language="cs" Source="$(MSBuildThisFileDirectory)/MDBuildTasks/FilterLocalCopyReferences.cs" />
+ </Task>
+ </UsingTask>
+
<!--
=================================================================
File download logic adapted from Xamarin.Build.Download
@@ -195,4 +209,55 @@
ExtensionDependencies="@(_ResolvedExtension)"
-->
</Target>
+
+ <!--
+ =================================================================
+ Remove CopyLocal items from references unless thir filenames
+ match an IncludeCopyLocal item.
+
+ This works around a NuGet issue where PrivateAssets="runtime"
+ doesn't work. It also prevents accidental unwanted local copying.
+
+ Additional diagnostic information can be printed by setting the
+ property -p:DebugFilterCopyReferences=true. This will print
+ which files are being removed, which are being kept, and
+ a list of probable IncludeCopyLocal items. Search the log
+ for "<IncludeCopyLocal Include=" and audit each occurrence. These
+ can be suppressed with corresponding SuppressCopyLocal items.
+
+ =================================================================
+ -->
+
+ <Target Name="_NuGetPrivateAssetsWorkaround_FilterLocalCopyReferences" BeforeTargets="_CopyFilesMarkedCopyLocal">
+ <FilterLocalCopyReferences
+ ReferenceCopyLocalPaths="@(ReferenceCopyLocalPaths)"
+ IncludeList="@(IncludeCopyLocal)"
+ SuppressList="@(SuppressCopyLocal)"
+ ReferencedProjects="@(_MSBuildProjectReferenceExistent)"
+ Configuration="$(Configuration)"
+ Platform="$(Platform)"
+ ProjectDir="$(MSBuildProjectDirectory)"
+ ProjectName="$(MSBuildProjectName)"
+ DebugCopies="$(DebugFilterCopyReferences)">
+ <Output TaskParameter="ItemsToRemove" ItemName="_ReferenceCopyLocalPathsRemove" />
+ </FilterLocalCopyReferences>
+ <ItemGroup>
+ <ReferenceCopyLocalPaths Remove="@(_ReferenceCopyLocalPathsRemove)" />
+ <_ReferenceCopyLocalPathsRemove Remove="@(_ReferenceCopyLocalPathsRemove)" />
+ </ItemGroup>
+ </Target>
+
+ <!--
+ HACK: Another workaround for broken PrivateAssets.
+ This is injected directly into the project by a target from the package as a Content+CopyToOutputDirectory
+ item. Unlike the items added by NuGet itself there isn't any way we can generically identify things like
+ this so we have to resort to horrible hacks.
+ -->
+ <Target Name="_NuGetPrivateAssetsWorkaround_RemoveSquiteInjectedContent" Condition="'$(MSBuildProjectName)' != 'MonoDevelop.Core'" AfterTargets="ResolveAssemblyReferences">
+ <ItemGroup>
+ <Content Remove="@(Content->WithMetadataValue('Filename', 'e_sqlite3'))" />
+ <!-- for some reason it also shows up in ReferenceCopyLocalPaths in some projects, suppress the FilterLocalCopyReferences warning -->
+ <SuppressCopyLocal Include="e_sqlite3.dll" />
+ </ItemGroup>
+ </Target>
</Project>
diff --git a/main/msbuild/MDBuildTasks/FilterLocalCopyReferences.cs b/main/msbuild/MDBuildTasks/FilterLocalCopyReferences.cs
new file mode 100644
index 0000000000..14acbc4f1c
--- /dev/null
+++ b/main/msbuild/MDBuildTasks/FilterLocalCopyReferences.cs
@@ -0,0 +1,194 @@
+//
+// Copyright (c) Microsoft Corp (https://www.microsoft.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+using System.Linq;
+using System.Collections.Generic;
+using System.IO;
+using Microsoft.Build.Framework;
+using Microsoft.Build.Utilities;
+using System.Text;
+
+namespace MDBuildTasks
+{
+ public class FilterLocalCopyReferences : Task
+ {
+ [Required]
+ public ITaskItem[] ReferenceCopyLocalPaths { get; set; }
+
+ [Required]
+ public ITaskItem[] IncludeList { get; set; }
+ public ITaskItem[] SuppressList { get; set; }
+
+ public ITaskItem[] ReferencedProjects { get; set; }
+
+ public string Configuration { get; set; }
+ public string Platform { get; set; }
+ public string ProjectDir { get; set; }
+ public string ProjectName { get; set; }
+
+ public bool DebugCopies { get; set; }
+
+ [Output]
+ public ITaskItem[] ItemsToRemove { get; set; }
+
+ public override bool Execute ()
+ {
+ HashSet<string> localCopyCone = null;
+ HashSet<string> importedLocalCopyConeNames = null;
+ List<ITaskItem> localCopyKeep = null;
+ HashSet<string> unusedIncludeKeys = null;
+ HashSet<string> suppressKeyHash = null;
+
+ if (DebugCopies) {
+ localCopyKeep = new List<ITaskItem> ();
+ localCopyCone = new HashSet<string> (StringComparer.OrdinalIgnoreCase);
+ unusedIncludeKeys = new HashSet<string> (StringComparer.OrdinalIgnoreCase);
+ importedLocalCopyConeNames = new HashSet<string> (StringComparer.OrdinalIgnoreCase);
+ suppressKeyHash = new HashSet<string> (StringComparer.OrdinalIgnoreCase);
+
+ // we can't invoke custom targets on the referenced project to get the output dir
+ // as some projects will not have these targets.
+ // instead, just poke in some standard location and hope it works. worse case, our diagnostics are poorer.
+ if (ReferencedProjects != null) {
+ foreach (var projectRef in ReferencedProjects) {
+ if (string.Equals (projectRef.GetMetadata ("BuildReference"), "true", StringComparison.OrdinalIgnoreCase)) {
+ var projectLocalCopyConeFile = GetLocalCopyConeFile (Path.GetDirectoryName (projectRef.GetMetadata ("FullPath")), projectRef.GetMetadata ("Configuration"), projectRef.GetMetadata ("Platform"));
+ if (File.Exists (projectLocalCopyConeFile)) {
+ foreach (var line in File.ReadAllLines (projectLocalCopyConeFile)) {
+ localCopyCone.Add (line);
+ }
+ }
+ }
+ }
+ }
+ foreach (var f in localCopyCone) {
+ importedLocalCopyConeNames.Add (Path.GetFileName (f));
+ }
+ if (SuppressList != null) {
+ foreach (var include in SuppressList) {
+ suppressKeyHash.Add (include.ItemSpec);
+ }
+ }
+ }
+
+ var toRemove = new List<ITaskItem> ();
+
+ var includeKeyHash = new HashSet<string> (StringComparer.OrdinalIgnoreCase);
+ foreach (var include in IncludeList) {
+ includeKeyHash.Add (include.ItemSpec);
+ }
+
+ foreach (var item in ReferenceCopyLocalPaths) {
+ var filename = Path.GetFileName (item.ItemSpec);
+ var includeKey = filename;
+ switch (Path.GetExtension (includeKey).ToLowerInvariant ()) {
+ case ".dll":
+ if (includeKey.EndsWith (".resources.dll", StringComparison.OrdinalIgnoreCase)) {
+ includeKey = includeKey.Substring (0, includeKey.Length - ".resources.dll".Length) + ".dll";
+ }
+ break;
+ case ".config":
+ includeKey = Path.GetFileNameWithoutExtension (includeKey);
+ break;
+ case ".pdb":
+ case ".xml":
+ includeKey = Path.ChangeExtension (includeKey, ".dll");
+ break;
+ }
+
+ if (!includeKeyHash.Contains (includeKey)) {
+ toRemove.Add (item);
+ if (DebugCopies) {
+ // Log a message that this may need to be imported.
+ // If the file was not in the cone of files that referenced projects have already local copied.
+ // Check the filename, not just the full path, because there are some edge cases like SharpZipLib
+ // where there are multiple different assemblies with the same name and we don't want copies of
+ // both floating around.
+ if (!importedLocalCopyConeNames.Contains (filename) && !suppressKeyHash.Contains (includeKey)) {
+ unusedIncludeKeys.Add (includeKey);
+ }
+ }
+ } else if (DebugCopies) {
+ localCopyCone.Add (item.ItemSpec);
+ localCopyKeep.Add (item);
+ }
+ }
+
+ ItemsToRemove = toRemove.ToArray ();
+
+ if (!DebugCopies) {
+ return true;
+ }
+
+ string localCopyConeFile = GetLocalCopyConeFile (ProjectDir, Configuration, Platform);
+ if (localCopyCone.Count > 0) {
+ File.WriteAllLines (localCopyConeFile, localCopyCone);
+ } else if (File.Exists (localCopyConeFile)) {
+ File.Delete (localCopyConeFile);
+ }
+
+ if ((toRemove.Count + localCopyKeep.Count + unusedIncludeKeys.Count) == 0) {
+ return true;
+ }
+
+ var message = new StringBuilder ();
+ message.AppendLine ($"====== FilterLocalCopyReferences {ProjectName} Debug ======");
+
+ if (toRemove.Count> 0) {
+ message.AppendLine ("Removing items:");
+ foreach (var item in toRemove) {
+ message.Append (" ");
+ message.AppendLine (item.ItemSpec);
+ }
+ }
+ if (localCopyKeep.Count > 0) {
+ message.AppendLine ("Keeping items:");
+ foreach (var item in localCopyKeep) {
+ message.Append (" ");
+ message.AppendLine (item.ItemSpec);
+ }
+ }
+ if (unusedIncludeKeys.Count > 0) {
+ message.AppendLine ("Unused keys:");
+ foreach (var key in unusedIncludeKeys) {
+ message.Append (" <IncludeCopyLocal Include=\"");
+ message.Append (key);
+ message.AppendLine ("\" />");
+ }
+ }
+ message.AppendLine ("=============================================");
+ Log.LogMessage (MessageImportance.High, message.ToString ());
+
+ return true;
+ }
+
+ static string GetLocalCopyConeFile (string projectDir, string configuration, string platform)
+ {
+ var objDir = Path.Combine (projectDir, "obj");
+ if (!string.IsNullOrEmpty (platform) && !(string.Equals (platform, "anycpu", StringComparison.OrdinalIgnoreCase) || string.Equals (platform, "any cpu", StringComparison.OrdinalIgnoreCase))) {
+ objDir = Path.Combine (objDir, platform);
+ }
+ objDir = Path.Combine (objDir, configuration);
+ return Path.Combine (objDir, "LocalCopyCone.txt");
+ }
+ }
+}
diff --git a/main/msbuild/MDBuildTasks/MDBuildTasks.csproj b/main/msbuild/MDBuildTasks/MDBuildTasks.csproj
index 158a8ed0c7..4ae6f110d3 100644
--- a/main/msbuild/MDBuildTasks/MDBuildTasks.csproj
+++ b/main/msbuild/MDBuildTasks/MDBuildTasks.csproj
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -38,6 +38,7 @@
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="15.9.20" />
</ItemGroup>
<ItemGroup>
+ <Compile Include="FilterLocalCopyReferences.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="DownloadFiles.cs" />
<Compile Include="DownloadNupkg.cs" />
diff --git a/main/src/addins/AspNet/MonoDevelop.AspNet.csproj b/main/src/addins/AspNet/MonoDevelop.AspNet.csproj
index 3950f35d4b..24595eaf38 100644
--- a/main/src/addins/AspNet/MonoDevelop.AspNet.csproj
+++ b/main/src/addins/AspNet/MonoDevelop.AspNet.csproj
@@ -87,6 +87,13 @@
<Reference Include="System.ServiceModel" />
<Reference Include="System.Runtime.Serialization" />
<PackageReference Include="Microsoft.AspNet.Mvc" version="5.2.7" PrivateAssets="runtime" />
+ <IncludeCopyLocal Include="System.Web.Mvc.dll" />
+ <IncludeCopyLocal Include="System.Web.Razor.dll" />
+ <IncludeCopyLocal Include="System.Web.Helpers.dll" />
+ <IncludeCopyLocal Include="System.Web.WebPages.Deployment.dll" />
+ <IncludeCopyLocal Include="System.Web.WebPages.Razor.dll" />
+ <IncludeCopyLocal Include="System.Web.WebPages.dll" />
+ <IncludeCopyLocal Include="Microsoft.Web.Infrastructure.dll" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\MonoDevelop.AspNet.addin.xml" />
diff --git a/main/src/addins/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft.csproj b/main/src/addins/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft.csproj
index d3657e3e41..e36a3db61a 100644
--- a/main/src/addins/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft.csproj
+++ b/main/src/addins/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft/MonoDevelop.Debugger.Soft.csproj
@@ -57,6 +57,8 @@
<Name>Mono.Addins</Name>
<Private>False</Private>
</ProjectReference>
+ <IncludeCopyLocal Include="Mono.Debugger.Soft.dll" />
+ <IncludeCopyLocal Include="Mono.Debugging.Soft.dll" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>
diff --git a/main/src/addins/MonoDevelop.Debugger.VSCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol.csproj b/main/src/addins/MonoDevelop.Debugger.VSCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol.csproj
index e73f08b74d..abfc017abb 100644
--- a/main/src/addins/MonoDevelop.Debugger.VSCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol.csproj
+++ b/main/src/addins/MonoDevelop.Debugger.VSCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol/MonoDevelop.Debugger.VsCodeDebugProtocol.csproj
@@ -40,6 +40,7 @@
<Name>Mono.Debugging</Name>
<Private>False</Private>
</ProjectReference>
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Shared.VSCodeDebugProtocol.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="AddinInfo.cs" />
diff --git a/main/src/addins/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32.csproj b/main/src/addins/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32.csproj
index e2223deff8..74a63b4193 100644
--- a/main/src/addins/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32.csproj
+++ b/main/src/addins/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32/MonoDevelop.Debugger.Win32.csproj
@@ -61,6 +61,9 @@
<Project>{74704c00-5861-4f86-920c-865148a175c5}</Project>
<Name>Mono.Debugging.Win32</Name>
</ProjectReference>
+ <IncludeCopyLocal Include="Mono.Debugging.Win32.dll" />
+ <IncludeCopyLocal Include="CorApi2.dll" />
+ <IncludeCopyLocal Include="CorApi.dll" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
diff --git a/main/src/addins/MonoDevelop.GtkCore/libsteticui/libsteticui.csproj b/main/src/addins/MonoDevelop.GtkCore/libsteticui/libsteticui.csproj
index 3672c7afa8..0583de188d 100644
--- a/main/src/addins/MonoDevelop.GtkCore/libsteticui/libsteticui.csproj
+++ b/main/src/addins/MonoDevelop.GtkCore/libsteticui/libsteticui.csproj
@@ -17,6 +17,10 @@
<Reference Include="System.Xml" />
<Reference Include="System.Core" />
<PackageReference Include="Mono.Cecil" Version="0.10.1" />
+ <SuppressCopyLocal Include="Mono.Cecil.Mdb.dll" />
+ <SuppressCopyLocal Include="Mono.Cecil.Pdb.dll" />
+ <SuppressCopyLocal Include="Mono.Cecil.Rocks.dll" />
+ <SuppressCopyLocal Include="Mono.Cecil.dll" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\libstetic\libstetic.csproj">
diff --git a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj
index 0d8010d28d..8cdfa25c46 100644
--- a/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj
+++ b/main/src/addins/MonoDevelop.PackageManagement/MonoDevelop.PackageManagement.csproj
@@ -28,7 +28,23 @@
<Reference Include="WindowsBase" />
<PackageReference Include="NuGet.PackageManagement" Version="4.8.0" PrivateAssets="runtime" />
<PackageReference Include="NuGet.Indexing" Version="4.8.0" PrivateAssets="runtime" />
- <PackageReference Include="SharpZipLib" Version="0.86.0" PrivateAssets="all" ExcludeAssets="all" />
+ <IncludeCopyLocal Include="Lucene.Net.dll" />
+ <IncludeCopyLocal Include="Microsoft.Web.XmlTransform.dll" />
+ <IncludeCopyLocal Include="NuGet.Commands.dll" />
+ <IncludeCopyLocal Include="NuGet.Common.dll" />
+ <IncludeCopyLocal Include="NuGet.Configuration.dll" />
+ <IncludeCopyLocal Include="NuGet.Credentials.dll" />
+ <IncludeCopyLocal Include="NuGet.DependencyResolver.Core.dll" />
+ <IncludeCopyLocal Include="NuGet.Frameworks.dll" />
+ <IncludeCopyLocal Include="NuGet.Indexing.dll" />
+ <IncludeCopyLocal Include="NuGet.LibraryModel.dll" />
+ <IncludeCopyLocal Include="NuGet.PackageManagement.dll" />
+ <IncludeCopyLocal Include="NuGet.Packaging.dll" />
+ <IncludeCopyLocal Include="NuGet.Packaging.Core.dll" />
+ <IncludeCopyLocal Include="NuGet.ProjectModel.dll" />
+ <IncludeCopyLocal Include="NuGet.Protocol.dll" />
+ <IncludeCopyLocal Include="NuGet.Resolver.dll" />
+ <IncludeCopyLocal Include="NuGet.Versioning.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
diff --git a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring.csproj b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring.csproj
index 86d4e702b7..76c06d79e9 100644
--- a/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring.csproj
+++ b/main/src/addins/MonoDevelop.Refactoring/MonoDevelop.Refactoring.csproj
@@ -25,6 +25,7 @@
<HintPath>..\..\..\external\Xamarin.Mac.dll</HintPath>
<Private>False</Private>
</Reference>
+ <IncludeCopyLocal Include="RefactoringEssentials.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="AssemblyInfo.cs" />
diff --git a/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnit3Runner/NUnit3Runner.csproj b/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnit3Runner/NUnit3Runner.csproj
index 0283f76666..45e051fb25 100644
--- a/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnit3Runner/NUnit3Runner.csproj
+++ b/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnit3Runner/NUnit3Runner.csproj
@@ -15,6 +15,11 @@
<Reference Include="System" />
<Reference Include="System.Xml" />
<PackageReference Include="NUnit.Engine" Version="$(NuGetVersionNUnit3)" PrivateAssets="runtime" />
+ <IncludeCopyLocal Include="Mono.Cecil.dll" />
+ <IncludeCopyLocal Include="nunit-agent-x86.exe" />
+ <IncludeCopyLocal Include="nunit-agent.exe" />
+ <IncludeCopyLocal Include="nunit.engine.api.dll" />
+ <IncludeCopyLocal Include="nunit.engine.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
diff --git a/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnitRunner/NUnitRunner.csproj b/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnitRunner/NUnitRunner.csproj
index 1066fcdfd3..227b513900 100644
--- a/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnitRunner/NUnitRunner.csproj
+++ b/main/src/addins/MonoDevelop.UnitTesting.NUnit/NUnitRunner/NUnitRunner.csproj
@@ -18,6 +18,10 @@
<!-- this is hacky but there is no package that exposes nunit.util.dll as a lib assembly -->
<DownloadNupkg Include="NUnit.Runners" Version="$(NuGetVersionNUnit2)" />
<Reference Include="nunit.util" HintPath="$(DownloadNupkgDirectory)NUnit.Runners.$(NuGetVersionNUnit2)\tools\lib\nunit.util.dll" />
+ <IncludeCopyLocal Include="nunit.framework.dll" />
+ <IncludeCopyLocal Include="nunit.core.dll" />
+ <IncludeCopyLocal Include="nunit.core.interfaces.dll" />
+ <IncludeCopyLocal Include="nunit.util.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="NUnitTestRunner.cs" />
diff --git a/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.csproj b/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.csproj
index 57061dab26..264728ae52 100644
--- a/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.csproj
+++ b/main/src/addins/MonoDevelop.UnitTesting/MonoDevelop.UnitTesting.csproj
@@ -20,6 +20,12 @@
<Reference Include="System.Runtime" />
<Reference Include="System.Runtime.Serialization" />
<PackageReference Include="Microsoft.TestPlatform.TranslationLayer" Version="$(NuGetVersionMicrosoftTestPlatform)" />
+ <IncludeCopyLocal Include="Microsoft.TestPlatform.CoreUtilities.dll" />
+ <IncludeCopyLocal Include="Microsoft.TestPlatform.PlatformAbstractions.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.TestPlatform.ObjectModel.dll" />
+ <IncludeCopyLocal Include="Microsoft.TestPlatform.CommunicationUtilities.dll" />
+ <IncludeCopyLocal Include="Microsoft.TestPlatform.VsTestConsole.TranslationLayer.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.TestPlatform.Common.dll" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\core\MonoDevelop.Core\MonoDevelop.Core.csproj">
diff --git a/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/MonoDevelop.TextTemplating.csproj b/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/MonoDevelop.TextTemplating.csproj
index 0691a23571..a816287845 100644
--- a/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/MonoDevelop.TextTemplating.csproj
+++ b/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/MonoDevelop.TextTemplating.csproj
@@ -61,6 +61,7 @@
<Name>Mono.Addins</Name>
<Private>False</Private>
</ProjectReference>
+ <IncludeCopyLocal Include="Mono.TextTemplating.dll" />
</ItemGroup>
<ItemGroup>
<ExtensionContent Include="Templates\**\*.*" />
diff --git a/main/src/addins/WindowsPlatform/WindowsAPICodePack/Shell/Shell.csproj b/main/src/addins/WindowsPlatform/WindowsAPICodePack/Shell/Shell.csproj
index 964a86c2e2..adb3982e19 100644
--- a/main/src/addins/WindowsPlatform/WindowsAPICodePack/Shell/Shell.csproj
+++ b/main/src/addins/WindowsPlatform/WindowsAPICodePack/Shell/Shell.csproj
@@ -26,6 +26,7 @@
<Reference Include="WindowsBase" />
<Reference Include="WindowsFormsIntegration" />
<Reference Include="System.Xaml" />
+ <SuppressCopyLocal Include="Microsoft.WindowsAPICodePack.dll" />
</ItemGroup>
<ItemGroup>
<InternalsVisibleTo Include="Microsoft.WindowsAPICodePack.ShellExtensions" />
diff --git a/main/src/addins/WindowsPlatform/WindowsPlatform/WindowsPlatform.csproj b/main/src/addins/WindowsPlatform/WindowsPlatform/WindowsPlatform.csproj
index 055d750318..9739a3ea01 100644
--- a/main/src/addins/WindowsPlatform/WindowsPlatform/WindowsPlatform.csproj
+++ b/main/src/addins/WindowsPlatform/WindowsPlatform/WindowsPlatform.csproj
@@ -58,6 +58,10 @@
<Project>{C93D746E-1586-4D4F-B411-BF5A966E6A08}</Project>
<Name>Xwt.WPF</Name>
</ProjectReference>
+ <IncludeCopyLocal Include="Microsoft.WindowsAPICodePack.dll" />
+ <IncludeCopyLocal Include="Microsoft.WindowsAPICodePack.Shell.dll" />
+ <IncludeCopyLocal Include="Xwt.Gtk.Windows.dll" />
+ <IncludeCopyLocal Include="Xwt.WPF.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="Dialogs\AddFileDialogHandler.cs" />
diff --git a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj
index bd7ed17532..7e478d33e6 100644
--- a/main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj
+++ b/main/src/core/MonoDevelop.Core/MonoDevelop.Core.csproj
@@ -95,7 +95,7 @@
<PackageReference Include="MonoDevelopDev.Analyzers" Version="$(NuGetVersionMonoDevelopAnalyzers)" />
<PackageReference Include="Newtonsoft.Json" Version="$(NuGetVersionNewtonsoftJson)" PrivateAssets="runtime" />
<PackageReference Include="JetBrains.SharpZipLib.Stripped" Version="0.87.20170615.10" PrivateAssets="runtime" />
- <PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="1.1.11" PrivateAssets="runtime" />
+ <PackageReference Include="SQLitePCLRaw.bundle_e_sqlite3" Version="1.1.11" PrivateAssets="runtime,build" />
<PackageReference Include="StreamJsonRpc" Version="1.5.43" PrivateAssets="runtime" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" PrivateAssets="runtime" />
<!-- remove this as it conflicts with the one in mscorlib. mono bug? -->
@@ -104,6 +104,86 @@
<PackageReference Include="Microsoft.VisualStudio.Threading.Analyzers" Version="16.0.96-beta" ExcludeAssets="all" />
</ItemGroup>
<ItemGroup>
+ <IncludeCopyLocal Include="Humanizer.dll" />
+ <IncludeCopyLocal Include="ICSharpCode.Decompiler.dll" />
+ <IncludeCopyLocal Include="ICSharpCode.SharpZipLib.dll" />
+ <IncludeCopyLocal Include="Microsoft.Build.MSBuildLocator.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.CSharp.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.CSharp.EditorFeatures.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.CSharp.Features.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.CSharp.Workspaces.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.EditorFeatures.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.EditorFeatures.Text.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.EditorFeatures.Wpf.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.Elfie.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.ExternalAccess.MonoDevelop.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.Features.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.VisualBasic.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.VisualBasic.EditorFeatures.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.VisualBasic.Features.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.VisualBasic.Workspaces.dll" />
+ <IncludeCopyLocal Include="Microsoft.CodeAnalysis.Workspaces.dll" />
+ <IncludeCopyLocal Include="Microsoft.DiaSymReader.dll" />
+ <IncludeCopyLocal Include="Microsoft.Microsoft.CodeAnalysis.Workspaces.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.CodingConventions.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Composition.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Composition.NetFxAttributes.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.CoreUtility.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.ImageCatalog.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Imaging.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Imaging.Interop.14.0.DesignTime.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Language.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Language.Intellisense.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Language.NavigateTo.Interfaces.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Language.StandardClassification.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.OLE.Interop.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Platform.VSEditor.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Shell.Interop.10.0.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Shell.Interop.11.0.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Shell.Interop.12.0.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Shell.Interop.14.0.DesignTime.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Shell.Interop.8.0.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Shell.Interop.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Text.Data.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Text.Internal.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Text.Logic.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Text.UI.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Text.UI.Wpf.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.TextManager.Interop.8.0.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.TextManager.Interop.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Threading.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Utilities.dll" />
+ <IncludeCopyLocal Include="Microsoft.VisualStudio.Validation.dll" />
+ <IncludeCopyLocal Include="Mono.Addins.dll" />
+ <IncludeCopyLocal Include="Mono.Addins.Setup.dll" />
+ <IncludeCopyLocal Include="Mono.Cecil.dll" />
+ <IncludeCopyLocal Include="Mono.Cecil.Mdb.dll" />
+ <IncludeCopyLocal Include="Mono.Cecil.Pdb.dll" />
+ <IncludeCopyLocal Include="Mono.Cecil.Rocks.dll" />
+ <IncludeCopyLocal Include="Newtonsoft.Json.dll" />
+ <IncludeCopyLocal Include="SQLitePCLRaw.batteries_e_sqlite3.dll" />
+ <IncludeCopyLocal Include="SQLitePCLRaw.batteries_v2.dll" />
+ <IncludeCopyLocal Include="SQLitePCLRaw.core.dll" />
+ <IncludeCopyLocal Include="SQLitePCLRaw.provider.e_sqlite3.dll" />
+ <IncludeCopyLocal Include="StreamJsonRpc.dll" />
+ <IncludeCopyLocal Include="System.Buffers.dll" />
+ <IncludeCopyLocal Include="System.Collections.Immutable.dll" />
+ <IncludeCopyLocal Include="System.Composition.AttributedModel.dll" />
+ <IncludeCopyLocal Include="System.Composition.Convention.dll" />
+ <IncludeCopyLocal Include="System.Composition.Hosting.dll" />
+ <IncludeCopyLocal Include="System.Composition.Runtime.dll" />
+ <IncludeCopyLocal Include="System.Composition.TypedParts.dll" />
+ <IncludeCopyLocal Include="System.Memory.dll" />
+ <IncludeCopyLocal Include="System.Numerics.Vectors.dll" />
+ <IncludeCopyLocal Include="System.Reflection.Metadata.dll" />
+ <IncludeCopyLocal Include="System.Runtime.CompilerServices.Unsafe.dll" />
+ <IncludeCopyLocal Include="System.Text.Encoding.CodePages.dll" />
+ <IncludeCopyLocal Include="System.Threading.Tasks.Dataflow.dll" />
+ <IncludeCopyLocal Include="System.Threading.Tasks.Extensions.dll" />
+ <IncludeCopyLocal Include="System.ValueTuple.dll" />
+ </ItemGroup>
+ <ItemGroup>
<Compile Include="MonoDevelop.Core\StringParserService.cs" />
<Compile Include="MonoDevelop.Core\UserException.cs" />
<Compile Include="MonoDevelop.Core\Runtime.cs" />
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj
index 3a7d302c76..be498867ca 100644
--- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj
+++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.csproj
@@ -63,6 +63,20 @@
<PackageReference Include="Microsoft.TemplateEngine.Edge" Version="$(NuGetVersionMicrosoftTemplateEngine)" PrivateAssets="runtime" />
<PackageReference Include="Microsoft.TemplateEngine.Orchestrator.RunnableProjects" Version="$(NuGetVersionMicrosoftTemplateEngine)" PrivateAssets="runtime" />
<PackageReference Include="YamlDotNet.Signed" Version="5.2.1" />
+ <IncludeCopyLocal Include="ICSharpCode.NRefactory.Cecil.dll" />
+ <IncludeCopyLocal Include="ICSharpCode.NRefactory.CSharp.dll" />
+ <IncludeCopyLocal Include="ICSharpCode.NRefactory.dll" />
+ <IncludeCopyLocal Include="Microsoft.TemplateEngine.Abstractions.dll" />
+ <IncludeCopyLocal Include="Microsoft.TemplateEngine.Core.Contracts.dll" />
+ <IncludeCopyLocal Include="Microsoft.TemplateEngine.Core.dll" />
+ <IncludeCopyLocal Include="Microsoft.TemplateEngine.Edge.dll" />
+ <IncludeCopyLocal Include="Microsoft.TemplateEngine.Orchestrator.RunnableProjects.dll" />
+ <IncludeCopyLocal Include="Microsoft.TemplateEngine.Utils.dll" />
+ <IncludeCopyLocal Include="Mono.Addins.Gui.dll" />
+ <IncludeCopyLocal Include="Mono.Debugging.dll" />
+ <IncludeCopyLocal Include="Xwt.dll" />
+ <IncludeCopyLocal Include="Xwt.Gtk.dll" />
+ <IncludeCopyLocal Include="YamlDotNet.dll" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MonoDevelop.Core\MonoDevelop.Core.csproj">
diff --git a/main/src/core/MonoDevelop.Startup/MonoDevelop.Startup.csproj b/main/src/core/MonoDevelop.Startup/MonoDevelop.Startup.csproj
index e162fb60cb..06babcc9f7 100644
--- a/main/src/core/MonoDevelop.Startup/MonoDevelop.Startup.csproj
+++ b/main/src/core/MonoDevelop.Startup/MonoDevelop.Startup.csproj
@@ -48,6 +48,7 @@
<Project>{42D1CE65-A14B-4218-B787-58AD7AA68513}</Project>
<Name>Mono.Addins.CecilReflector</Name>
</ProjectReference>
+ <IncludeCopyLocal Include="Mono.Addins.CecilReflector.dll" />
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
diff --git a/main/tests/TestRunner/TestRunner.csproj b/main/tests/TestRunner/TestRunner.csproj
index a82747f99f..0541cb498c 100644
--- a/main/tests/TestRunner/TestRunner.csproj
+++ b/main/tests/TestRunner/TestRunner.csproj
@@ -19,6 +19,12 @@
<DownloadNupkg Include="NUnit.Runners" Version="$(NuGetVersionNUnit2)" />
<Reference Include="nunit.util" HintPath="$(DownloadNupkgDirectory)NUnit.Runners.$(NuGetVersionNUnit2)\tools\lib\nunit.util.dll" />
<Reference Include="nunit-console-runner" HintPath="$(DownloadNupkgDirectory)NUnit.Runners.$(NuGetVersionNUnit2)\tools\lib\nunit-console-runner.dll" />
+ <IncludeCopyLocal Include="nunit.framework.dll" />
+ <IncludeCopyLocal Include="nunit.core.dll" />
+ <IncludeCopyLocal Include="nunit.core.interfaces.dll" />
+ <IncludeCopyLocal Include="ICSharpCode.SharpZipLib.dll" />
+ <IncludeCopyLocal Include="nunit-console-runner.dll" />
+ <IncludeCopyLocal Include="nunit.util.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
diff --git a/main/tests/UnitTests/UnitTests.csproj b/main/tests/UnitTests/UnitTests.csproj
index 730158b260..a2d1f4b25c 100644
--- a/main/tests/UnitTests/UnitTests.csproj
+++ b/main/tests/UnitTests/UnitTests.csproj
@@ -34,6 +34,8 @@
<Project>{D12F0F7B-8DE3-43EC-BA49-41052D065A9B}</Project>
<Name>GuiUnit_NET_4_5</Name>
</ProjectReference>
+ <IncludeCopyLocal Include="GuiUnit.exe" />
+ <IncludeCopyLocal Include="GuiUnit.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="Util.cs" />
diff --git a/main/tests/performance/MonoDevelop.PerformanceTesting/MonoDevelop.PerformanceTesting.csproj b/main/tests/performance/MonoDevelop.PerformanceTesting/MonoDevelop.PerformanceTesting.csproj
index 7891c843f5..e10b560326 100644
--- a/main/tests/performance/MonoDevelop.PerformanceTesting/MonoDevelop.PerformanceTesting.csproj
+++ b/main/tests/performance/MonoDevelop.PerformanceTesting/MonoDevelop.PerformanceTesting.csproj
@@ -16,6 +16,7 @@
<ItemGroup>
<Reference Include="System" />
<PackageReference Include="NUnit" Version="$(NuGetVersionNUnit2)" />
+ <IncludeCopyLocal Include="nunit.framework.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
diff --git a/main/tests/ui/MonoDevelop.UserInterfaceTesting/MonoDevelop.UserInterfaceTesting.csproj b/main/tests/ui/MonoDevelop.UserInterfaceTesting/MonoDevelop.UserInterfaceTesting.csproj
index 9e63f99c1a..6e88e7b809 100644
--- a/main/tests/ui/MonoDevelop.UserInterfaceTesting/MonoDevelop.UserInterfaceTesting.csproj
+++ b/main/tests/ui/MonoDevelop.UserInterfaceTesting/MonoDevelop.UserInterfaceTesting.csproj
@@ -49,6 +49,8 @@
<Name>MonoDevelop.Ide</Name>
<Private>False</Private>
</ProjectReference>
+ <!-- FIXME we need a canonical owner for copying nunit into build\tests -->
+ <IncludeCopyLocal Include="nunit.framework.dll" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
</Project>