├── .editorconfig ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── BUG-REPORT.yml │ ├── ENHANCEMENT.yml │ ├── FEATURE-REQUEST.md │ └── config.yml ├── pull_request_template.md └── workflows │ ├── csharp.yml │ ├── csharp_release.yml │ ├── integration_test.yml │ ├── sonarqube.yml │ ├── source_clear_cron.yml │ └── ticket_reference_check.yml ├── .gitignore ├── CHANGELOG.md ├── CODEOWNERS ├── CONTRIBUTING.md ├── LICENSE ├── OptimizelySDK.DemoApp ├── App_Start │ ├── BundleConfig.cs │ ├── FilterConfig.cs │ └── RouteConfig.cs ├── Content │ ├── Images │ │ ├── item_1.png │ │ ├── item_2.png │ │ ├── item_3.png │ │ ├── item_4.png │ │ ├── item_5.png │ │ ├── item_6.png │ │ ├── item_7.png │ │ ├── item_8.png │ │ └── item_9.png │ ├── Site.css │ ├── bootstrap-grid.css │ ├── bootstrap-grid.css.map │ ├── bootstrap-grid.min.css │ ├── bootstrap-grid.min.css.map │ ├── bootstrap-grid.rtl.css │ ├── bootstrap-grid.rtl.css.map │ ├── bootstrap-grid.rtl.min.css │ ├── bootstrap-grid.rtl.min.css.map │ ├── bootstrap-reboot.css │ ├── bootstrap-reboot.css.map │ ├── bootstrap-reboot.min.css │ ├── bootstrap-reboot.min.css.map │ ├── bootstrap-reboot.rtl.css │ ├── bootstrap-reboot.rtl.css.map │ ├── bootstrap-reboot.rtl.min.css │ ├── bootstrap-reboot.rtl.min.css.map │ ├── bootstrap-utilities.css │ ├── bootstrap-utilities.css.map │ ├── bootstrap-utilities.min.css │ ├── bootstrap-utilities.min.css.map │ ├── bootstrap-utilities.rtl.css │ ├── bootstrap-utilities.rtl.css.map │ ├── bootstrap-utilities.rtl.min.css │ ├── bootstrap-utilities.rtl.min.css.map │ ├── bootstrap.css │ ├── bootstrap.css.map │ ├── bootstrap.min.css │ ├── bootstrap.min.css.map │ ├── bootstrap.rtl.css │ ├── bootstrap.rtl.css.map │ ├── bootstrap.rtl.min.css │ └── bootstrap.rtl.min.css.map ├── Controllers │ ├── DemoController.cs │ └── HomeController.cs ├── Global.asax ├── Global.asax.cs ├── Log4Net.config ├── Models │ ├── Config.cs │ ├── DemoViewModel.cs │ ├── Product.cs │ └── Visitor.cs ├── OptimizelySDK.DemoApp.csproj ├── Properties │ └── AssemblyInfo.cs ├── README.md ├── Scripts │ ├── README.md │ ├── _references.js │ ├── bootstrap.bundle.js │ ├── bootstrap.bundle.js.map │ ├── bootstrap.bundle.min.js │ ├── bootstrap.bundle.min.js.map │ ├── bootstrap.esm.js │ ├── bootstrap.esm.js.map │ ├── bootstrap.esm.min.js │ ├── bootstrap.esm.min.js.map │ ├── bootstrap.js │ ├── bootstrap.js.map │ ├── bootstrap.min.js │ ├── bootstrap.min.js.map │ ├── esm │ │ ├── popper-utils.js │ │ ├── popper-utils.js.map │ │ ├── popper-utils.min.js │ │ ├── popper-utils.min.js.map │ │ ├── popper.js │ │ ├── popper.js.map │ │ ├── popper.min.js │ │ └── popper.min.js.map │ ├── index.d.ts │ ├── jquery-1.10.2.intellisense.js │ ├── jquery-3.7.0.intellisense.js │ ├── jquery-3.7.0.js │ ├── jquery-3.7.0.min.js │ ├── jquery-3.7.0.min.map │ ├── jquery-3.7.0.slim.js │ ├── jquery-3.7.0.slim.min.js │ ├── jquery-3.7.0.slim.min.map │ ├── jquery.validate-vsdoc.js │ ├── jquery.validate.js │ ├── jquery.validate.min.js │ ├── jquery.validate.unobtrusive.js │ ├── jquery.validate.unobtrusive.min.js │ ├── modernizr-2.6.2.js │ ├── popper-utils.js │ ├── popper-utils.js.map │ ├── popper-utils.min.js │ ├── popper-utils.min.js.map │ ├── popper.js │ ├── popper.js.map │ ├── popper.min.js │ ├── popper.min.js.map │ ├── respond.js │ ├── respond.min.js │ └── umd │ │ ├── popper-utils.js │ │ ├── popper-utils.js.map │ │ ├── popper-utils.min.js │ │ ├── popper-utils.min.js.map │ │ ├── popper.js │ │ ├── popper.js.map │ │ ├── popper.min.js │ │ └── popper.min.js.map ├── Utils │ ├── InMemoryHandler.cs │ ├── Log4NetLogger.cs │ └── MultiLogger.cs ├── Views │ ├── Demo │ │ ├── Config.cshtml │ │ ├── Index.cshtml │ │ ├── Messages.cshtml │ │ ├── SelectVisitor.cshtml │ │ ├── Shop.cshtml │ │ └── _DemoMenu.cshtml │ ├── Home │ │ └── Index.cshtml │ ├── Shared │ │ ├── Error.cshtml │ │ └── _Layout.cshtml │ ├── Web.config │ └── _ViewStart.cshtml ├── Web.Debug.config ├── Web.Release.config ├── Web.config ├── favicon.ico └── packages.config ├── OptimizelySDK.NETFramework.sln ├── OptimizelySDK.Net35 ├── JsonNet │ └── Newtonsoft.Json.dll ├── OptimizelySDK.Net35.csproj ├── Properties │ └── AssemblyInfo.cs └── packages.config ├── OptimizelySDK.Net40 ├── OptimizelySDK.Net40.csproj ├── Properties │ └── AssemblyInfo.cs └── packages.config ├── OptimizelySDK.NetStandard16 ├── ICloneable.cs ├── OptimizelySDK.NetStandard16.csproj ├── OptimizelySDK.NetStandard16.sln └── Properties │ └── AssemblyInfo.cs ├── OptimizelySDK.NetStandard20 ├── OptimizelySDK.NetStandard20.csproj └── Properties │ └── AssemblyInfo.cs ├── OptimizelySDK.Tests ├── App.config ├── Assertions.cs ├── AudienceConditionsTests │ ├── ConditionEvaluationTest.cs │ ├── ConditionsTest.cs │ └── SegmentsTests.cs ├── BucketerTest.cs ├── ClientConfigHandlerTest.cs ├── ConfigTest │ ├── FallbackProjectConfigManagerTest.cs │ ├── HttpProjectConfigManagerTest.cs │ ├── PollingProjectConfigManagerTest.cs │ ├── ProjectConfigProps.cs │ └── TestPollingProjectConfigManager.cs ├── DecisionServiceTest.cs ├── DefaultErrorHandlerTest.cs ├── EmptyRolloutRule.json ├── EntityTests │ ├── FeatureVariableTest.cs │ └── IntegrationTest.cs ├── EventTests │ ├── BatchEventProcessorTest.cs │ ├── CanonicalEvent.cs │ ├── DefaultEventDispatcherTest.cs │ ├── EventBuilderTest.cs │ ├── EventEntitiesTest.cs │ ├── EventFactoryTest.cs │ ├── EventProcessorProps.cs │ ├── ForwardingEventProcessorTest.cs │ ├── LogEventTest.cs │ ├── TestEventDispatcher.cs │ ├── TestForwardingEventDispatcher.cs │ └── UserEventFactoryTest.cs ├── ForcedDecisionsStoreTest.cs ├── IntegrationEmptyDatafile.json ├── IntegrationNonOdpDatafile.json ├── IntegrationOdpDatafile.json ├── IntegrationOdpWithOtherFieldsDatafile.json ├── InvalidEventDispatcher.cs ├── NotificationTests │ └── NotificationCenterTests.cs ├── OdpSegmentsDatafile.json ├── OdpTests │ ├── HttpClientTestUtil.cs │ ├── LruCacheTest.cs │ ├── OdpConfigTest.cs │ ├── OdpEventApiManagerTest.cs │ ├── OdpEventManagerTests.cs │ ├── OdpManagerTest.cs │ ├── OdpSegmentApiManagerTest.cs │ └── OdpSegmentManagerTest.cs ├── OptimizelyConfigTests │ └── OptimizelyConfigTest.cs ├── OptimizelyDecisions │ └── OptimizelyDecisionTest.cs ├── OptimizelyFactoryTest.cs ├── OptimizelyJSONTest.cs ├── OptimizelySDK.Tests.csproj ├── OptimizelyTest.cs ├── OptimizelyUserContextTest.cs ├── ProjectConfigTest.cs ├── Properties │ └── AssemblyInfo.cs ├── TestBucketer.cs ├── TestData.json ├── TestSetup.cs ├── Utils │ ├── Reflection.cs │ ├── TestConversionExtensions.cs │ ├── TestData.cs │ └── TestHttpProjectConfigManagerUtil.cs ├── UtilsTests │ ├── ConditionParserTest.cs │ ├── EventTagUtilsTest.cs │ ├── ExceptionExtensionsTest.cs │ ├── ExperimentUtilsTest.cs │ ├── PrivateObject.cs │ └── ValidatorTest.cs ├── ValidEventDispatcher.cs ├── emptydatafile.json ├── packages.config ├── similar_exp_keys.json ├── similar_rule_keys_bucketing.json ├── simple_ab_experiments.json ├── typed_audience_datafile.json └── unsupported_version_datafile.json ├── OptimizelySDK.nuspec.template ├── OptimizelySDK.png ├── OptimizelySDK.sln ├── OptimizelySDK.sln.DotSettings ├── OptimizelySDK ├── AudienceConditions │ ├── AndCondition.cs │ ├── AudienceIdCondition.cs │ ├── BaseCondition.cs │ ├── EmptyCondition.cs │ ├── ICondition.cs │ ├── NotCondition.cs │ ├── OrCondition.cs │ └── SemanticVersion.cs ├── Bucketing │ ├── Bucketer.cs │ ├── Decision.cs │ ├── DecisionService.cs │ ├── UserProfile.cs │ ├── UserProfileService.cs │ ├── UserProfileTracker.cs │ └── UserProfileUtil.cs ├── ClientConfigHandler.cs ├── Config │ ├── DatafileProjectConfig.cs │ ├── FallbackProjectConfigManager.cs │ ├── HttpProjectConfigManager.cs │ ├── PollingProjectConfigManager.cs │ └── ProjectConfigManager.cs ├── Entity │ ├── Attribute.cs │ ├── Audience.cs │ ├── Entity.cs │ ├── Event.cs │ ├── EventTags.cs │ ├── Experiment.cs │ ├── FeatureDecision.cs │ ├── FeatureFlag.cs │ ├── FeatureVariable.cs │ ├── FeatureVariableUsage.cs │ ├── ForcedVariation.cs │ ├── Group.cs │ ├── IdKeyEntity.cs │ ├── Integration.cs │ ├── Result.cs │ ├── Rollout.cs │ ├── TrafficAllocation.cs │ ├── UserAttributes.cs │ └── Variation.cs ├── ErrorHandler │ ├── DefaultErrorHandler.cs │ ├── IErrorHandler.cs │ └── NoOpErrorHandler.cs ├── Event │ ├── BatchEventProcessor.cs │ ├── Builder │ │ ├── EventBuilder.cs │ │ └── Params.cs │ ├── Dispatcher │ │ ├── DefaultEventDispatcher.cs │ │ ├── HttpClientEventDispatcher45.cs │ │ ├── IEventDispatcher.cs │ │ └── WebRequestEventDispatcher35.cs │ ├── Entity │ │ ├── ConversionEvent.cs │ │ ├── Decision.cs │ │ ├── DecisionMetadata.cs │ │ ├── EventBatch.cs │ │ ├── EventContext.cs │ │ ├── ImpressionEvent.cs │ │ ├── Snapshot.cs │ │ ├── SnapshotEvent.cs │ │ ├── UserEvent.cs │ │ ├── Visitor.cs │ │ └── VisitorAttribute.cs │ ├── EventFactory.cs │ ├── EventProcessor.cs │ ├── ForwardingEventProcessor.cs │ ├── LogEvent.cs │ └── UserEventFactory.cs ├── Exceptions │ └── OptimizelyException.cs ├── ForcedDecisionsStore.cs ├── IOptimizely.cs ├── Logger │ ├── DefaultLogger.cs │ ├── ILogger.cs │ └── NoOpLogger.cs ├── Notifications │ ├── NotificationCenter.cs │ └── NotificationCenterRegistry.cs ├── Odp │ ├── Constants.cs │ ├── Entity │ │ ├── Audience.cs │ │ ├── Customer.cs │ │ ├── Data.cs │ │ ├── Edge.cs │ │ ├── Error.cs │ │ ├── Extension.cs │ │ ├── Location.cs │ │ ├── Node.cs │ │ ├── OdpEvent.cs │ │ └── Response.cs │ ├── Enums.cs │ ├── ICache.cs │ ├── IOdpEventApiManager.cs │ ├── IOdpEventManager.cs │ ├── IOdpManager.cs │ ├── IOdpSegmentApiManager.cs │ ├── IOdpSegmentManager.cs │ ├── LruCache.cs │ ├── OdpConfig.cs │ ├── OdpEventApiManager.cs │ ├── OdpEventManager.cs │ ├── OdpManager.cs │ ├── OdpSegmentApiManager.cs │ └── OdpSegmentManager.cs ├── Optimizely.cs ├── OptimizelyDecisionContext.cs ├── OptimizelyDecisions │ ├── DecisionMessage.cs │ ├── DecisionReasons.cs │ ├── OptimizelyDecideOption.cs │ └── OptimizelyDecision.cs ├── OptimizelyFactory.cs ├── OptimizelyForcedDecision.cs ├── OptimizelyJSON.cs ├── OptimizelySDK.csproj ├── OptimizelyUserContext.cs ├── OptlyConfig │ ├── IOptimizelyConfigManager.cs │ ├── OptimizelyAttribute.cs │ ├── OptimizelyAudience.cs │ ├── OptimizelyConfig.cs │ ├── OptimizelyConfigService.cs │ ├── OptimizelyEvent.cs │ ├── OptimizelyExperiment.cs │ ├── OptimizelyFeature.cs │ ├── OptimizelyVariable.cs │ └── OptimizelyVariation.cs ├── ProjectConfig.cs ├── Properties │ └── AssemblyInfo.cs ├── Utils │ ├── AttributeMatchTypes.cs │ ├── CollectionExtensions.cs │ ├── ConditionParser.cs │ ├── ConfigParser.cs │ ├── ControlAttributes.cs │ ├── DateTimeUtils.cs │ ├── DecisionInfoTypes.cs │ ├── EventTagUtils.cs │ ├── ExceptionExtensions.cs │ ├── ExperimentUtils.cs │ ├── Schema.cs │ ├── Validator.cs │ └── schema.json └── packages.config ├── README.md ├── docs └── readme-sync │ └── sdk-reference-guides │ └── csharp-sdk │ ├── 010 - install-sdk-csharp.md │ ├── 010 -install-sdk-csharp.md │ ├── 020 - initialize-sdk-csharp.md │ ├── 030 - example-usage-csharp.md │ ├── 040 - optimizelyconfig-csharp.md │ ├── 050 - implement-a-user-profile-csharp.md │ ├── 060 - configure-event-dispatcher-csharp.md │ ├── 070 - event-batching-csharp.md │ ├── 080 - customize-logger-csharp.md │ ├── 090 - customize-error-handler-csharp.md │ ├── 100 - pass-in-audience-attributes-csharp.md │ ├── 110 - set-up-notification-listener-csharp.md │ ├── 120 - activate-csharp.md │ ├── 130 - get-enabled-features-csharp.md │ ├── 140 - get-feature-variable-csharp.md │ ├── 150 - get-forced-variation-csharp.md │ ├── 160 - get-variation-csharp.md │ ├── 170 - is-feature-enabled-csharp.md │ ├── 180 - set-forced-variation-csharp.md │ ├── 190 - track-csharp.md │ └── index.md ├── install_mono.sh ├── keypair.snk └── pull_request_template.md /.github/ISSUE_TEMPLATE/ENHANCEMENT.yml: -------------------------------------------------------------------------------- 1 | name: ✨Enhancement 2 | description: Create a new ticket for a Enhancement/Tech-initiative for the benefit of the SDK which would be considered for a minor version update. 3 | title: "[ENHANCEMENT]
Timestamp | Type | Message |
@item.Timestamp | 37 |@item.Type | 38 |@item.Message |
39 |
@string.Format("{0:c}", product.Price)
53 |Optimizely's C# SDK lets you integrate Optimizely in .NET applications.
25 |32 | Begin your Optimizely A/B test of a simulated shopping website experience with Optimizely C# SDK. 33 |
34 |37 | Demo App » 38 |
39 |45 | Optimizely is an Experimentation Platform that allows you to run experiments and roll out new 46 | features on your website, mobile app, server-side application, or any other internet-connected 47 | device. In addition to our Web solution, we offer SDKs for developers to run experiments in iOS, 48 | Android, Python, Java, Ruby, Node, PHP, and JavaScript. 49 |
50 | 51 |55 | Digital Innovation is all around you. Ready to tap into it? Optimizely lets you experiment on 56 | everything—from design choices to algorithms. That way the best ideas always win, and the best 57 | customer experiences get even better. 58 |
59 | 60 |