Skip to content
This repository has been archived by the owner on Dec 18, 2017. It is now read-only.

Commit

Permalink
Removing passing --framework using an environment variable
Browse files Browse the repository at this point in the history
  • Loading branch information
moozzyk committed Sep 22, 2015
1 parent a9611e2 commit 9a75ce0
Show file tree
Hide file tree
Showing 9 changed files with 31 additions and 34 deletions.
9 changes: 5 additions & 4 deletions src/Microsoft.Dnx.Host.Clr/DomainManager.cs
Expand Up @@ -32,14 +32,12 @@ public override void InitializeNewDomain(AppDomainSetup appDomainInfo)
_info.Main = Main;
BindApplicationMain(ref _info);
appDomainInfo.ApplicationBase = _info.RuntimeDirectory;
appDomainInfo.TargetFrameworkName = DetermineAppDomainTargetFramework();
appDomainInfo.TargetFrameworkName = DetermineAppDomainTargetFramework(_info.Framework);
appDomainInfo.ConfigurationFile = Path.Combine(_info.ApplicationBase, Constants.AppConfigurationFileName);
}

private string DetermineAppDomainTargetFramework()
private string DetermineAppDomainTargetFramework(string frameworkName)
{
// Check if the native bootstrapper gave us a framework name
string frameworkName = Environment.GetEnvironmentVariable(EnvironmentNames.Framework);
FrameworkName framework;
Version version = null;
if (!string.IsNullOrEmpty(frameworkName))
Expand Down Expand Up @@ -177,6 +175,9 @@ public struct ApplicationMainInfo

[MarshalAs(UnmanagedType.BStr)]
public string ApplicationBase;

[MarshalAs(UnmanagedType.BStr)]
public string Framework;
}

[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
Expand Down
1 change: 0 additions & 1 deletion src/Microsoft.Dnx.Runtime.Sources/Impl/EnvironmentNames.cs
Expand Up @@ -14,7 +14,6 @@ internal static class EnvironmentNames
public const string Home = "DNX_HOME";
public const string GlobalPath = "DNX_GLOBAL_PATH";
public const string AppBase = "DNX_APPBASE";
public const string Framework = "DNX_FRAMEWORK";
public const string Configuration = "DNX_CONFIGURATION";
public const string BuildKeyFile = "DNX_BUILD_KEY_FILE";
public const string BuildDelaySign = "DNX_BUILD_DELAY_SIGN";
Expand Down
10 changes: 8 additions & 2 deletions src/dnx.clr/ClrBootstrapper.h
Expand Up @@ -28,12 +28,14 @@ struct ApplicationMainInfo
/* out */ BSTR RuntimeDirectory;

/* out */ BSTR ApplicationBase;

/* out */ BSTR Framework;
};

class __declspec(uuid("7E9C5238-60DC-49D3-94AA-53C91FA79F7C")) IClrBootstrapper : public IUnknown
{
public:
virtual HRESULT InitializeRuntime(LPCWSTR runtimeDirectory, LPCWSTR applicationBase) = 0;
virtual HRESULT InitializeRuntime(LPCWSTR runtimeDirectory, LPCWSTR applicationBase, LPCWSTR framework) = 0;

virtual HRESULT BindApplicationMain(ApplicationMainInfo* pInfo) = 0;

Expand Down Expand Up @@ -62,6 +64,7 @@ class ClrBootstrapper :

_bstr_t _applicationBase;
_bstr_t _runtimeDirectory;
_bstr_t _framework;

ApplicationMainInfo _applicationMainInfo;

Expand Down Expand Up @@ -94,7 +97,7 @@ class ClrBootstrapper :
return NULL;
}

HRESULT InitializeRuntime(LPCWSTR runtimeDirectory, LPCWSTR applicationBase)
HRESULT InitializeRuntime(LPCWSTR runtimeDirectory, LPCWSTR applicationBase, LPCWSTR framework)
{
Lock lock(&_crit);
if (_calledInitializeRuntime)
Expand All @@ -106,6 +109,7 @@ class ClrBootstrapper :

_applicationBase = applicationBase;
_runtimeDirectory = runtimeDirectory;
_framework = framework;

m_pHostAssemblyManager = new HostAssemblyManager(runtimeDirectory);
m_pHostAssemblyManager->AddRef();
Expand Down Expand Up @@ -165,6 +169,8 @@ class ClrBootstrapper :
#endif
.copy();

pInfo->Framework = _framework.copy();

return S_OK;
}

Expand Down
4 changes: 3 additions & 1 deletion src/dnx.clr/dnx.clr.cpp
Expand Up @@ -18,7 +18,9 @@ extern "C" __declspec(dllexport) HRESULT __stdcall CallApplicationMain(PCALL_APP

g_clrBootstrapper = bootstrapper;

hr = bootstrapper->InitializeRuntime(data->runtimeDirectory, data->applicationBase);
auto framework = dnx::utils::get_option_value(data->argc, const_cast<wchar_t**>(data->argv), L"--framework");

hr = bootstrapper->InitializeRuntime(data->runtimeDirectory, data->applicationBase, framework);
if (SUCCEEDED(hr))
{
g_clrBootstrapper = NULL;
Expand Down
1 change: 1 addition & 0 deletions src/dnx.common/include/utils.h
Expand Up @@ -27,5 +27,6 @@ namespace dnx
#endif
int find_bootstrapper_option_index(int argc, dnx::char_t**argv, const dnx::char_t* optionName);
int find_first_non_bootstrapper_param_index(int argc, dnx::char_t**argv);
dnx::char_t* get_option_value(int argc, dnx::char_t* argv[], const dnx::char_t* optionName);
}
}
13 changes: 13 additions & 0 deletions src/dnx.common/utils.cpp
Expand Up @@ -230,5 +230,18 @@ namespace dnx

return -1;
}

dnx::char_t* get_option_value(int argc, dnx::char_t* argv[], const dnx::char_t* optionName)
{
auto index = dnx::utils::find_bootstrapper_option_index(argc, argv, optionName);

// no parameters or '--{optionName}' is the last value in the array or `--{optionName}` not found
if (index < 0 || index >= argc - 1)
{
return nullptr;
}

return argv[index + 1];
}
}
}
2 changes: 0 additions & 2 deletions src/dnx.coreclr.unix/dnx.coreclr.cpp
Expand Up @@ -409,8 +409,6 @@ extern "C" int CallApplicationMain(CALL_APPLICATION_MAIN_DATA* data)
}
else
{
setenv("DNX_FRAMEWORK", "dnxcore50", 1);

result = CallMain(data);
}

Expand Down
2 changes: 0 additions & 2 deletions src/dnx.coreclr/dnx.coreclr.cpp
Expand Up @@ -301,8 +301,6 @@ extern "C" HRESULT __stdcall CallApplicationMain(PCALL_APPLICATION_MAIN_DATA dat
{
auto trace_writer = dnx::trace_writer{ IsTracingEnabled() };

SetEnvironmentVariable(L"DNX_FRAMEWORK", L"dnxcore50");

Win32KDisable(trace_writer);

auto coreclr_module = LoadCoreClr(data->runtimeDirectory, trace_writer);
Expand Down
23 changes: 1 addition & 22 deletions src/dnx/dnx.cpp
Expand Up @@ -51,19 +51,6 @@ const dnx::char_t* allocate_and_copy(const dnx::char_t* value)
return allocate_and_copy(value, x_strlen(value));
}

dnx::char_t* GetOptionValue(int argc, dnx::char_t* argv[], const dnx::char_t* optionName)
{
auto index = dnx::utils::find_bootstrapper_option_index(argc, argv, optionName);

// no parameters or '--{optionName}' is the last value in the array or `--{optionName}` not found
if (index < 0 || index >= argc - 1)
{
return nullptr;
}

return argv[index + 1];
}

void AppendAppbaseFromFile(const dnx::char_t* path, std::vector<const dnx::char_t*>& expanded_args)
{
auto split_idx = split_path(path);
Expand Down Expand Up @@ -186,7 +173,7 @@ void FreeExpandedCommandLineArguments(size_t nArgc, dnx::char_t** ppszArgv)
bool GetApplicationBase(const dnx::xstring_t& currentDirectory, int argc, dnx::char_t* argv[], /*out*/ dnx::char_t* fullAppBasePath)
{
dnx::char_t buffer[MAX_PATH];
const dnx::char_t* appBase = GetOptionValue(argc, argv, _X("--appbase"));
const dnx::char_t* appBase = dnx::utils::get_option_value(argc, argv, _X("--appbase"));

// Note: We use application base from DNX_APPBASE environment variable only if --appbase
// did not exist. if neither --appBase nor DNX_APPBASE existed we use current directory
Expand All @@ -203,14 +190,6 @@ int CallApplicationProcessMain(int argc, dnx::char_t* argv[], dnx::trace_writer&
{
const auto currentDirectory = GetNativeBootstrapperDirectory();

// Set the FRAMEWORK environment variable to the value provided on the command line
// (it needs to be available BEFORE the application main is called)
auto frameworkName = GetOptionValue(argc, argv, _X("--framework"));
if (frameworkName)
{
SetEnvironmentVariable(_X("DNX_FRAMEWORK"), frameworkName);
}

CALL_APPLICATION_MAIN_DATA data = { 0 };
data.argc = argc;
data.argv = const_cast<const dnx::char_t**>(argv);
Expand Down

0 comments on commit 9a75ce0

Please sign in to comment.