d98c1f8724
The issue is when the ProjectContextBuilder sees a CompileTimePlaceholder "_._" file on a full framework, it assumes that dependency has to come from the "Reference Assemblies" directory. If it can't be found there, an error is raised. However, there are other reasons "_._" placeholders are created (when a NuGet package doesn't want its dependencies to be exposed in the Compile dependencies of its consumers). And these placeholders can exist for assemblies that aren't in the full framework - in this case System.Diagnostics.FileVersionInfo and others. To fix this, if the reference can't be resolved from the "Reference Assemblies" folder, it is just skipped. If the compiler really needs that assembly, it will raise an error to the user. Dotnet build shouldn't raise the error. Fix #2906
119 lines
3.9 KiB
C#
119 lines
3.9 KiB
C#
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using FluentAssertions;
|
|
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
using Xunit;
|
|
|
|
namespace Microsoft.DotNet.Tools.Builder.Tests
|
|
{
|
|
public class GivenDotnetBuildBuildsProjects : TestBase
|
|
{
|
|
[Fact]
|
|
public void It_builds_projects_with_Unicode_in_path()
|
|
{
|
|
var testInstance = TestAssetsManager
|
|
.CreateTestInstance("TestAppWithUnicodéPath")
|
|
.WithLockFiles();
|
|
|
|
var testProjectDirectory = testInstance.TestRoot;
|
|
|
|
var buildCommand = new BuildCommand("");
|
|
buildCommand.WorkingDirectory = testProjectDirectory;
|
|
|
|
buildCommand.ExecuteWithCapturedOutput()
|
|
.Should()
|
|
.Pass();
|
|
}
|
|
|
|
[Fact]
|
|
public void It_builds_projects_with_Unicode_in_path_project_path_passed()
|
|
{
|
|
var testInstance = TestAssetsManager
|
|
.CreateTestInstance("TestAppWithUnicodéPath")
|
|
.WithLockFiles();
|
|
|
|
var testProject = Path.Combine(testInstance.TestRoot, "project.json");
|
|
|
|
new BuildCommand(testProject)
|
|
.ExecuteWithCapturedOutput()
|
|
.Should()
|
|
.Pass();
|
|
}
|
|
|
|
[Fact]
|
|
public void It_builds_projects_with_ruleset_relative_path()
|
|
{
|
|
var testInstance = TestAssetsManager
|
|
.CreateTestInstance("TestRuleSet")
|
|
.WithLockFiles();
|
|
|
|
new BuildCommand(Path.Combine("TestLibraryWithRuleSet", "project.json"), skipLoadProject: true)
|
|
.WithWorkingDirectory(testInstance.TestRoot)
|
|
.ExecuteWithCapturedOutput()
|
|
.Should()
|
|
.Pass()
|
|
.And
|
|
.HaveStdErrContaining("CA1001")
|
|
.And
|
|
.HaveStdErrContaining("CA2213")
|
|
.And
|
|
.NotHaveStdErrContaining("CA1018"); // this violation is hidden in the ruleset
|
|
}
|
|
|
|
[Fact]
|
|
public void It_builds_projects_with_a_local_project_json_path()
|
|
{
|
|
var testInstance = TestAssetsManager
|
|
.CreateTestInstance("TestAppSimple")
|
|
.WithLockFiles();
|
|
|
|
new BuildCommand("project.json")
|
|
.WithWorkingDirectory(testInstance.TestRoot)
|
|
.ExecuteWithCapturedOutput()
|
|
.Should()
|
|
.Pass();
|
|
}
|
|
|
|
[Fact]
|
|
public void It_builds_projects_with_xmlDoc_and_spaces_in_the_path()
|
|
{
|
|
var testInstance = TestAssetsManager
|
|
.CreateTestInstance("TestLibraryWithXmlDoc", identifier: "With Space")
|
|
.WithLockFiles();
|
|
|
|
testInstance.TestRoot.Should().Contain(" ");
|
|
|
|
var output = new DirectoryInfo(Path.Combine(testInstance.TestRoot, "output"));
|
|
|
|
new BuildCommand("", output: output.FullName, framework: DefaultLibraryFramework)
|
|
.WithWorkingDirectory(testInstance.TestRoot)
|
|
.ExecuteWithCapturedOutput()
|
|
.Should()
|
|
.Pass();
|
|
|
|
output.Should().HaveFiles(new[]
|
|
{
|
|
"TestLibraryWithXmlDoc.dll",
|
|
"TestLibraryWithXmlDoc.xml"
|
|
});
|
|
}
|
|
|
|
[WindowsOnlyFact]
|
|
public void It_builds_projects_targeting_net46_and_Roslyn()
|
|
{
|
|
var testInstance = TestAssetsManager
|
|
.CreateTestInstance("AppWithNet46AndRoslyn")
|
|
.WithLockFiles();
|
|
|
|
var testProject = Path.Combine(testInstance.TestRoot, "project.json");
|
|
|
|
new BuildCommand(testProject)
|
|
.Execute()
|
|
.Should()
|
|
.Pass();
|
|
}
|
|
}
|
|
}
|