зеркало из https://github.com/microsoft/mwt-ds.git
temp changes
This commit is contained in:
Родитель
d558b4dd66
Коммит
7fe6a9c777
|
@ -6,6 +6,7 @@
|
|||
**/dll
|
||||
**/ipch
|
||||
**/packages
|
||||
**/bin
|
||||
|
||||
# VS files
|
||||
*.opensdf
|
||||
|
|
30
Decision.sln
30
Decision.sln
|
@ -1,7 +1,7 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio 2013
|
||||
VisualStudioVersion = 12.0.30723.0
|
||||
VisualStudioVersion = 12.0.31101.0
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DecisionSample", "DecisionSample\DecisionSample.csproj", "{140FCD6F-077F-432D-A9E4-0D63B5DACD93}"
|
||||
EndProject
|
||||
|
@ -9,12 +9,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "explore_clr", "explore\clr\
|
|||
EndProject
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "explore_static", "explore\static\explore_static.vcxproj", "{ACE47E98-488C-4CDF-B9F1-36337B2855AD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DecisionServiceTest", "DecisionServiceTest\DecisionServiceTest.csproj", "{8C5A34B2-FD5F-4D3C-888C-674DE232967E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
Test|x64 = Test|x64
|
||||
Test|x86 = Test|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{140FCD6F-077F-432D-A9E4-0D63B5DACD93}.Debug|x64.ActiveCfg = Debug|x64
|
||||
|
@ -25,6 +29,10 @@ Global
|
|||
{140FCD6F-077F-432D-A9E4-0D63B5DACD93}.Release|x64.Build.0 = Release|x64
|
||||
{140FCD6F-077F-432D-A9E4-0D63B5DACD93}.Release|x86.ActiveCfg = Release|x86
|
||||
{140FCD6F-077F-432D-A9E4-0D63B5DACD93}.Release|x86.Build.0 = Release|x86
|
||||
{140FCD6F-077F-432D-A9E4-0D63B5DACD93}.Test|x64.ActiveCfg = Test|x64
|
||||
{140FCD6F-077F-432D-A9E4-0D63B5DACD93}.Test|x64.Build.0 = Test|x64
|
||||
{140FCD6F-077F-432D-A9E4-0D63B5DACD93}.Test|x86.ActiveCfg = Test|x86
|
||||
{140FCD6F-077F-432D-A9E4-0D63B5DACD93}.Test|x86.Build.0 = Test|x86
|
||||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Debug|x64.Build.0 = Debug|x64
|
||||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
|
@ -33,6 +41,10 @@ Global
|
|||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Release|x64.Build.0 = Release|x64
|
||||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Release|x86.ActiveCfg = Release|Win32
|
||||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Release|x86.Build.0 = Release|Win32
|
||||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Test|x64.ActiveCfg = Debug|x64
|
||||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Test|x64.Build.0 = Debug|x64
|
||||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Test|x86.ActiveCfg = Debug|Win32
|
||||
{8400DA16-1F46-4A31-A126-BBE16F62BFD7}.Test|x86.Build.0 = Debug|Win32
|
||||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Debug|x64.Build.0 = Debug|x64
|
||||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
|
@ -41,6 +53,22 @@ Global
|
|||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Release|x64.Build.0 = Release|x64
|
||||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Release|x86.ActiveCfg = Release|Win32
|
||||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Release|x86.Build.0 = Release|Win32
|
||||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Test|x64.ActiveCfg = Debug|x64
|
||||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Test|x64.Build.0 = Debug|x64
|
||||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Test|x86.ActiveCfg = Debug|Win32
|
||||
{ACE47E98-488C-4CDF-B9F1-36337B2855AD}.Test|x86.Build.0 = Debug|Win32
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Debug|x64.Build.0 = Debug|x64
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Debug|x86.Build.0 = Debug|x86
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Release|x64.ActiveCfg = Release|x64
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Release|x64.Build.0 = Release|x64
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Release|x86.ActiveCfg = Release|x86
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Release|x86.Build.0 = Release|x86
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Test|x64.ActiveCfg = Debug|x64
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Test|x64.Build.0 = Debug|x64
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Test|x86.ActiveCfg = Debug|x86
|
||||
{8C5A34B2-FD5F-4D3C-888C-674DE232967E}.Test|x86.Build.0 = Debug|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace DecisionSample
|
|||
/// <remarks>
|
||||
/// A batch is created whenever a criterion is met.
|
||||
/// </remarks>
|
||||
class BatchingConfiguration
|
||||
public class BatchingConfiguration
|
||||
{
|
||||
/// <summary>
|
||||
/// Period of time where events are grouped in one batch.
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DefineConstants>TRACE;DEBUG</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
|
@ -52,6 +52,26 @@
|
|||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Test|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Test\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;TEST</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Test|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Test\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.Data.Edm, Version=5.6.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace DecisionSample
|
|||
/// <summary>
|
||||
/// Encapsulates logic for recorder with async server communications & policy update.
|
||||
/// </summary>
|
||||
class DecisionService<TContext> : IDisposable
|
||||
public class DecisionService<TContext> : IDisposable
|
||||
{
|
||||
public DecisionService(DecisionServiceConfiguration<TContext> config)
|
||||
{
|
||||
|
|
|
@ -6,7 +6,7 @@ namespace DecisionSample
|
|||
/// <summary>
|
||||
/// Configuration object for the client decision service which contains settings for batching, retry storage, etc...
|
||||
/// </summary>
|
||||
class DecisionServiceConfiguration<TContext>
|
||||
public class DecisionServiceConfiguration<TContext>
|
||||
{
|
||||
public DecisionServiceConfiguration()
|
||||
{
|
||||
|
|
|
@ -30,7 +30,7 @@ namespace DecisionSample
|
|||
this.batch.Window(batchConfig.Duration)
|
||||
.Select(w => w.Buffer(batchConfig.EventCount, batchConfig.BufferSize, ev => ev.Measure()))
|
||||
.SelectMany(buffer => buffer)
|
||||
.Subscribe(events => this.UploadBatch(events));
|
||||
.Subscribe(events => this.BatchProcess(events));
|
||||
}
|
||||
|
||||
public void Record(TContext context, uint action, float probability, string uniqueKey)
|
||||
|
@ -62,7 +62,35 @@ namespace DecisionSample
|
|||
// TODO: at the time of server communication, if the client is out of memory (or meets some predefined upper bound):
|
||||
// 1. It can block the execution flow.
|
||||
// 2. Or drop events.
|
||||
private void UploadBatch(IList<IEvent> events)
|
||||
private void BatchProcess(IList<IEvent> events)
|
||||
{
|
||||
using (var jsonMemStream = new MemoryStream())
|
||||
using (var jsonWriter = new JsonTextWriter(new StreamWriter(jsonMemStream)))
|
||||
{
|
||||
JsonSerializer ser = new JsonSerializer();
|
||||
ser.Serialize(jsonWriter, new EventBatch
|
||||
{
|
||||
Events = events,
|
||||
ExperimentalUnitDurationInSeconds = this.experimentalUnitDurationInSeconds
|
||||
});
|
||||
|
||||
jsonWriter.Flush();
|
||||
jsonMemStream.Position = 0;
|
||||
|
||||
#if TEST
|
||||
this.BatchLog("decision_service_test_output", jsonMemStream);
|
||||
#else
|
||||
this.BatchUpload(jsonMemStream);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
private void BatchLog(string batchFile, MemoryStream jsonMemStream)
|
||||
{
|
||||
File.WriteAllText(batchFile, Encoding.UTF8.GetString(jsonMemStream.ToArray()));
|
||||
}
|
||||
|
||||
private void BatchUpload(MemoryStream jsonMemStream)
|
||||
{
|
||||
using (var client = new HttpClient())
|
||||
{
|
||||
|
@ -70,31 +98,17 @@ namespace DecisionSample
|
|||
client.Timeout = TimeSpan.FromSeconds(this.ConnectionTimeOutInSeconds);
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(this.AuthenticationScheme, this.authorizationToken);
|
||||
|
||||
using (var jsonMemStream = new MemoryStream())
|
||||
using (var jsonWriter = new JsonTextWriter(new StreamWriter(jsonMemStream)))
|
||||
Task<HttpResponseMessage> taskPost = client.PostAsync(this.ServicePostAddress, new StreamContent(jsonMemStream));
|
||||
taskPost.Wait();
|
||||
|
||||
HttpResponseMessage response = taskPost.Result;
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
JsonSerializer ser = new JsonSerializer();
|
||||
ser.Serialize(jsonWriter, new EventBatch
|
||||
{
|
||||
Events = events,
|
||||
ExperimentalUnitDurationInSeconds = this.experimentalUnitDurationInSeconds
|
||||
});
|
||||
|
||||
jsonWriter.Flush();
|
||||
jsonMemStream.Position = 0;
|
||||
Task<string> taskReadResponse = response.Content.ReadAsStringAsync();
|
||||
taskReadResponse.Wait();
|
||||
string responseMessage = taskReadResponse.Result;
|
||||
|
||||
Task<HttpResponseMessage> taskPost = client.PostAsync(this.ServicePostAddress, new StreamContent(jsonMemStream));
|
||||
taskPost.Wait();
|
||||
|
||||
HttpResponseMessage response = taskPost.Result;
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
Task<string> taskReadResponse = response.Content.ReadAsStringAsync();
|
||||
taskReadResponse.Wait();
|
||||
string responseMessage = taskReadResponse.Result;
|
||||
|
||||
// TODO: throw exception with custom message?
|
||||
}
|
||||
// TODO: throw exception with custom message?
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,11 +5,11 @@ namespace DecisionSample
|
|||
{
|
||||
/* Temp classes to support interface */
|
||||
|
||||
interface IExploreAlgorithm<TContext>
|
||||
public interface IExploreAlgorithm<TContext>
|
||||
{
|
||||
IExplorer<TContext> Get();
|
||||
}
|
||||
class EpsilonGreedyExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
public class EpsilonGreedyExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
{
|
||||
public EpsilonGreedyExplorer(IPolicy<TContext> policy, float epsilon, uint numActions)
|
||||
{
|
||||
|
@ -28,7 +28,7 @@ namespace DecisionSample
|
|||
}
|
||||
}
|
||||
|
||||
class TauFirstExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
public class TauFirstExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
{
|
||||
public TauFirstExplorer(IPolicy<TContext> policy, uint tau, uint numActions)
|
||||
{
|
||||
|
@ -47,7 +47,7 @@ namespace DecisionSample
|
|||
}
|
||||
}
|
||||
|
||||
class BootstrapExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
public class BootstrapExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
{
|
||||
public BootstrapExplorer(IPolicy<TContext>[] policies, uint numActions)
|
||||
{
|
||||
|
@ -64,7 +64,7 @@ namespace DecisionSample
|
|||
}
|
||||
}
|
||||
|
||||
class SoftmaxExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
public class SoftmaxExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
{
|
||||
public SoftmaxExplorer(IScorer<TContext> scorer, float lambda, uint numActions)
|
||||
{
|
||||
|
@ -83,7 +83,7 @@ namespace DecisionSample
|
|||
}
|
||||
}
|
||||
|
||||
class GenericExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
public class GenericExplorer<TContext> : IExploreAlgorithm<TContext>
|
||||
{
|
||||
public GenericExplorer(IScorer<TContext> scorer, uint numActions)
|
||||
{
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
using DecisionSample;
|
||||
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
|
||||
namespace DecisionServiceTest
|
||||
{
|
||||
[TestClass]
|
||||
public class Batching
|
||||
{
|
||||
[TestMethod]
|
||||
public void TestBatchingByCount()
|
||||
{
|
||||
var serviceConfig = new DecisionServiceConfiguration<TestContext>()
|
||||
{
|
||||
AppId = "mwt",
|
||||
Explorer = new EpsilonGreedyExplorer<TestContext>(new TestPolicy(), epsilon: 0.2f, numActions: 10),
|
||||
BatchConfig = new BatchingConfiguration()
|
||||
{
|
||||
Duration = TimeSpan.FromSeconds(30),
|
||||
EventCount = 10,
|
||||
BufferSize = 10 * 1024 * 1024
|
||||
}
|
||||
};
|
||||
|
||||
var service = new DecisionService<TestContext>(serviceConfig);
|
||||
|
||||
string uniqueKey = "eventid";
|
||||
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
uint action = service.ChooseAction(uniqueKey, new TestContext());
|
||||
// Report outcome as a JSON
|
||||
service.ReportOutcome("my json outcome", uniqueKey);
|
||||
// Report (simple) reward as a simple float
|
||||
service.ReportReward(0.5f, uniqueKey);
|
||||
}
|
||||
|
||||
string json = System.IO.File.ReadAllText("decision_service_test_output");
|
||||
var batch = JsonConvert.DeserializeObject<EventBatch>(json);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
using MultiWorldTesting;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace DecisionServiceTest
|
||||
{
|
||||
class TestContext { }
|
||||
|
||||
class TestOutcome { }
|
||||
|
||||
class TestPolicy : IPolicy<TestContext>
|
||||
{
|
||||
public uint ChooseAction(TestContext context)
|
||||
{
|
||||
// Always returns the same action regardless of context
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,121 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{8C5A34B2-FD5F-4D3C-888C-674DE232967E}</ProjectGuid>
|
||||
<OutputType>Library</OutputType>
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>DecisionServiceTest</RootNamespace>
|
||||
<AssemblyName>DecisionServiceTest</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">10.0</VisualStudioVersion>
|
||||
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
|
||||
<ReferencePath>$(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages</ReferencePath>
|
||||
<IsCodedUITest>False</IsCodedUITest>
|
||||
<TestProjectType>UnitTest</TestProjectType>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>TRACE;DEBUG;TEST</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x86\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
|
||||
<OutputPath>bin\x86\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x86</PlatformTarget>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<SpecificVersion>False</SpecificVersion>
|
||||
<HintPath>..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
</ItemGroup>
|
||||
<Choose>
|
||||
<When Condition="('$(VisualStudioVersion)' == '10.0' or '$(VisualStudioVersion)' == '') and '$(TargetFrameworkVersion)' == 'v3.5'">
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=10.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
||||
</ItemGroup>
|
||||
</When>
|
||||
<Otherwise>
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework" />
|
||||
</ItemGroup>
|
||||
</Otherwise>
|
||||
</Choose>
|
||||
<ItemGroup>
|
||||
<Compile Include="Batching.cs" />
|
||||
<Compile Include="Common.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\DecisionSample\DecisionSample.csproj">
|
||||
<Project>{140fcd6f-077f-432d-a9e4-0d63b5dacd93}</Project>
|
||||
<Name>DecisionSample</Name>
|
||||
</ProjectReference>
|
||||
<ProjectReference Include="..\explore\clr\explore_clr.vcxproj">
|
||||
<Project>{8400da16-1f46-4a31-a126-bbe16f62bfd7}</Project>
|
||||
<Name>explore_clr</Name>
|
||||
</ProjectReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Choose>
|
||||
<When Condition="'$(VisualStudioVersion)' == '10.0' And '$(IsCodedUITest)' == 'True'">
|
||||
<ItemGroup>
|
||||
<Reference Include="Microsoft.VisualStudio.QualityTools.CodedUITestFramework, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Common, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITest.Extension, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.VisualStudio.TestTools.UITesting, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
</When>
|
||||
</Choose>
|
||||
<Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
Other similar extension points exist, see Microsoft.Common.targets.
|
||||
<Target Name="BeforeBuild">
|
||||
</Target>
|
||||
<Target Name="AfterBuild">
|
||||
</Target>
|
||||
-->
|
||||
</Project>
|
|
@ -0,0 +1,36 @@
|
|||
using System.Reflection;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
// General Information about an assembly is controlled through the following
|
||||
// set of attributes. Change these attribute values to modify the information
|
||||
// associated with an assembly.
|
||||
[assembly: AssemblyTitle("DecisionServiceTest")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("DecisionServiceTest")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2015")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Setting ComVisible to false makes the types in this assembly not visible
|
||||
// to COM components. If you need to access a type in this assembly from
|
||||
// COM, set the ComVisible attribute to true on that type.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
// The following GUID is for the ID of the typelib if this project is exposed to COM
|
||||
[assembly: Guid("624df17a-6d9d-495c-a1b6-27ab88befab4")]
|
||||
|
||||
// Version information for an assembly consists of the following four values:
|
||||
//
|
||||
// Major Version
|
||||
// Minor Version
|
||||
// Build Number
|
||||
// Revision
|
||||
//
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net45" />
|
||||
</packages>
|
Загрузка…
Ссылка в новой задаче