Fix ANCM search for dotnet.exe (#18311)

This commit is contained in:
itminus 2020-01-15 03:50:27 +08:00 committed by Justin Kotalik
parent 116799fa70
commit deceebc062
6 changed files with 63 additions and 3 deletions

View File

@ -145,9 +145,10 @@ HostFxrResolver::GetHostFxrParameters(
}
BOOL
HostFxrResolver::IsDotnetExecutable(const std::filesystem::path & dotnetPath)
HostFxrResolver::IsDotnetExecutable(const std::filesystem::path& dotnetPath)
{
return ends_with(dotnetPath, L"dotnet.exe", true);
std::wstring filename = dotnetPath.filename().wstring();
return equals_ignore_case(filename, L"dotnet.exe");
}
void

View File

@ -43,6 +43,7 @@
</ItemGroup>
<ItemGroup>
<ClCompile Include="ConfigUtilityTests.cpp" />
<ClCompile Include="dotnet_exe_path_tests.cpp" />
<ClCompile Include="GlobalVersionTests.cpp" />
<ClCompile Include="Helpers.cpp" />
<ClCompile Include="inprocess_application_tests.cpp" />
@ -71,6 +72,17 @@
<Project>{d57ea297-6dc2-4bc0-8c91-334863327863}</Project>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="Fake\hello-dotnet.exe">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Fake\hello-dotnet.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Fake\hostfxr.dll">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemDefinitionGroup />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
@ -185,4 +197,4 @@
</AdditionalDependencies>
</Lib>
</ItemDefinitionGroup>
</Project>
</Project>

View File

@ -0,0 +1 @@
this a is faked hello-dotnet.dll used for tests

View File

@ -0,0 +1 @@
this a is faked hello-dotnet.exe used for tests

View File

@ -0,0 +1 @@
this a is faked hostfxr.dll used for tests

View File

@ -0,0 +1,44 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
#include "stdafx.h"
#include <array>
#include "fakeclasses.h"
#include "HostFxrResolver.h"
using ::testing::_;
using ::testing::NiceMock;
// Externals defined in inprocess
namespace InprocessTests
{
TEST(Dotnet_EXE_Path_Tests, EndWith_dotnet)
{
HostFxrResolver resolver;
std::filesystem::path hostFxrDllPath;
std::vector<std::wstring> arguments;
ErrorContext errorContext;
auto currentPath = std::filesystem::current_path();
auto appPath= currentPath /= L"Fake";
auto processPath = L"hello-dotnet";
auto args = L"-a --tag t -x";
std::filesystem::path knownDotnetLocation=L"C:/Program Files/dotnet";
// expected no exception should be thrown
HostFxrResolver::GetHostFxrParameters(
processPath,
appPath,
args,
hostFxrDllPath,
knownDotnetLocation,
arguments,
errorContext);
ASSERT_TRUE(ends_with(arguments[0], L"\\Fake\\hello-dotnet.exe", true));
ASSERT_STREQ(arguments[1].c_str(), L"-a");
ASSERT_STREQ(arguments[2].c_str(), L"--tag");
ASSERT_STREQ(arguments[3].c_str(), L"t");
ASSERT_STREQ(arguments[4].c_str(), L"-x");
}
}