mirror of
https://github.com/zoriya/DotExperiments.git
synced 2025-12-05 22:16:11 +00:00
Adding expression rewrites
This commit is contained in:
13
.idea/.idea.DotExperiments/.idea/.gitignore
generated
vendored
Normal file
13
.idea/.idea.DotExperiments/.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Rider ignored files
|
||||
/modules.xml
|
||||
/.idea.DotExperiments.iml
|
||||
/contentModel.xml
|
||||
/projectSettingsUpdater.xml
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
4
.idea/.idea.DotExperiments/.idea/encodings.xml
generated
Normal file
4
.idea/.idea.DotExperiments/.idea/encodings.xml
generated
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding" addBOMForNewFiles="with BOM under Windows, with no BOM otherwise" />
|
||||
</project>
|
||||
8
.idea/.idea.DotExperiments/.idea/indexLayout.xml
generated
Normal file
8
.idea/.idea.DotExperiments/.idea/indexLayout.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ContentModelUserStore">
|
||||
<attachedFolders />
|
||||
<explicitIncludes />
|
||||
<explicitExcludes />
|
||||
</component>
|
||||
</project>
|
||||
7
.idea/.idea.DotExperiments/.idea/riderModule.iml
generated
Normal file
7
.idea/.idea.DotExperiments/.idea/riderModule.iml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="RIDER_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$/../.." />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
6
.idea/.idea.DotExperiments/.idea/vcs.xml
generated
Normal file
6
.idea/.idea.DotExperiments/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
11
DotExperiments.csproj
Normal file
11
DotExperiments.csproj
Normal file
@@ -0,0 +1,11 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net5.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2020.3.0" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
16
DotExperiments.sln
Normal file
16
DotExperiments.sln
Normal file
@@ -0,0 +1,16 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotExperiments", "DotExperiments.csproj", "{FB46BB47-A1DB-44CD-9FAF-50BD6E533008}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{FB46BB47-A1DB-44CD-9FAF-50BD6E533008}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{FB46BB47-A1DB-44CD-9FAF-50BD6E533008}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{FB46BB47-A1DB-44CD-9FAF-50BD6E533008}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{FB46BB47-A1DB-44CD-9FAF-50BD6E533008}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
10
DotExperiments/.idea/.idea.DotExperiments/.idea/contentModel.xml
generated
Normal file
10
DotExperiments/.idea/.idea.DotExperiments/.idea/contentModel.xml
generated
Normal file
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ContentModelStore">
|
||||
<e p="$USER_HOME$/.cache/JetBrains/Rider2020.3/extResources" t="IncludeRecursive" />
|
||||
<e p="$USER_HOME$/.cache/JetBrains/Rider2020.3/resharper-host/local/Transient/Rider/v203/SolutionCaches/_DotExperiments.-1975764949.00" t="ExcludeRecursive" />
|
||||
<e p="$PROJECT_DIR$" t="IncludeFlat">
|
||||
<e p="DotExperiments.sln" t="IncludeFlat" />
|
||||
</e>
|
||||
</component>
|
||||
</project>
|
||||
8
DotExperiments/.idea/.idea.DotExperiments/.idea/indexLayout.xml
generated
Normal file
8
DotExperiments/.idea/.idea.DotExperiments/.idea/indexLayout.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ContentModelUserStore">
|
||||
<attachedFolders />
|
||||
<explicitIncludes />
|
||||
<explicitExcludes />
|
||||
</component>
|
||||
</project>
|
||||
8
DotExperiments/.idea/.idea.DotExperiments/.idea/modules.xml
generated
Normal file
8
DotExperiments/.idea/.idea.DotExperiments/.idea/modules.xml
generated
Normal file
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/.idea.DotExperiments/.idea/riderModule.iml" filepath="$PROJECT_DIR$/.idea/.idea.DotExperiments/.idea/riderModule.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
||||
6
DotExperiments/.idea/.idea.DotExperiments/.idea/projectSettingsUpdater.xml
generated
Normal file
6
DotExperiments/.idea/.idea.DotExperiments/.idea/projectSettingsUpdater.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RiderProjectSettingsUpdater">
|
||||
<option name="vcsConfiguration" value="2" />
|
||||
</component>
|
||||
</project>
|
||||
7
DotExperiments/.idea/.idea.DotExperiments/.idea/riderModule.iml
generated
Normal file
7
DotExperiments/.idea/.idea.DotExperiments/.idea/riderModule.iml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="RIDER_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$/../.." />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
6
DotExperiments/.idea/.idea.DotExperiments/.idea/vcs.xml
generated
Normal file
6
DotExperiments/.idea/.idea.DotExperiments/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
60
DotExperiments/.idea/.idea.DotExperiments/.idea/workspace.xml
generated
Normal file
60
DotExperiments/.idea/.idea.DotExperiments/.idea/workspace.xml
generated
Normal file
@@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="8f105013-24ef-4052-8695-b0376b63c6c3" name="Default Changelist" comment="" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
|
||||
</component>
|
||||
<component name="ProjectId" id="1pt3N96DnhlOd7E48cCz9PGEXha" />
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
|
||||
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
|
||||
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/.." />
|
||||
<property name="nodejs_package_manager_path" value="npm" />
|
||||
<property name="settings.editor.selected.configurable" value="preferences.pluginManager" />
|
||||
<property name="vue.rearranger.settings.migration" value="true" />
|
||||
</component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="8f105013-24ef-4052-8695-b0376b63c6c3" name="Default Changelist" comment="" />
|
||||
<created>1615988517462</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1615988517462</updated>
|
||||
<workItem from="1615988519871" duration="39000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="UnityProjectConfiguration" hasMinimizedUI="null" />
|
||||
<component name="UnityUnitTestConfiguration" currentTestLauncher="NUnit" />
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State />
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
<component name="VcsManagerConfiguration">
|
||||
<option name="CLEAR_INITIAL_COMMIT_MESSAGE" value="true" />
|
||||
</component>
|
||||
</project>
|
||||
62
Expressions/ExpressionConverter.cs
Normal file
62
Expressions/ExpressionConverter.cs
Normal file
@@ -0,0 +1,62 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using JetBrains.Annotations;
|
||||
|
||||
namespace DotExperiments
|
||||
{
|
||||
public static class ExpressionUtility
|
||||
{
|
||||
public static Expression<T> Convert<T>([CanBeNull] this Expression expr)
|
||||
where T : Delegate
|
||||
{
|
||||
Expression<T> e = expr switch
|
||||
{
|
||||
null => null,
|
||||
LambdaExpression lambda => new ExpressionConverter<T>(lambda).VisitAndConvert(),
|
||||
_ => throw new ArgumentException("Can't convert a non lambda.")
|
||||
};
|
||||
|
||||
return ExpressionRewrite.Rewrite<T>(e);
|
||||
}
|
||||
|
||||
private class ExpressionConverter<TTo> : ExpressionVisitor
|
||||
where TTo : Delegate
|
||||
{
|
||||
private readonly LambdaExpression _expression;
|
||||
private readonly ParameterExpression[] _newParams;
|
||||
|
||||
internal ExpressionConverter(LambdaExpression expression)
|
||||
{
|
||||
_expression = expression;
|
||||
|
||||
Type[] paramTypes = typeof(TTo).GetGenericArguments()[..^1];
|
||||
if (paramTypes.Length != _expression.Parameters.Count)
|
||||
throw new ArgumentException("Parameter count from internal and external lambda are not matched.");
|
||||
|
||||
_newParams = new ParameterExpression[paramTypes.Length];
|
||||
for (int i = 0; i < paramTypes.Length; i++)
|
||||
{
|
||||
if (_expression.Parameters[i].Type == paramTypes[i])
|
||||
_newParams[i] = _expression.Parameters[i];
|
||||
else
|
||||
_newParams[i] = Expression.Parameter(paramTypes[i], _expression.Parameters[i].Name);
|
||||
}
|
||||
}
|
||||
|
||||
internal Expression<TTo> VisitAndConvert()
|
||||
{
|
||||
Type returnType = _expression.Type.GetGenericArguments().Last();
|
||||
Expression body = _expression.ReturnType == returnType
|
||||
? Visit(_expression.Body)
|
||||
: Expression.Convert(Visit(_expression.Body)!, returnType);
|
||||
return Expression.Lambda<TTo>(body!, _newParams);
|
||||
}
|
||||
|
||||
protected override Expression VisitParameter(ParameterExpression node)
|
||||
{
|
||||
return _newParams.FirstOrDefault(x => x.Name == node.Name) ?? node;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
115
Expressions/ExpressionRewrite.cs
Normal file
115
Expressions/ExpressionRewrite.cs
Normal file
@@ -0,0 +1,115 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
|
||||
namespace DotExperiments
|
||||
{
|
||||
public class ExpressionRewriteAttribute : Attribute
|
||||
{
|
||||
public string Link { get; }
|
||||
public string Inner { get; }
|
||||
|
||||
public ExpressionRewriteAttribute(string link, string inner = null)
|
||||
{
|
||||
Link = link;
|
||||
Inner = inner;
|
||||
}
|
||||
}
|
||||
|
||||
public class ExpressionRewrite : ExpressionVisitor
|
||||
{
|
||||
private string _inner;
|
||||
private readonly List<(string inner, ParameterExpression param, ParameterExpression newParam)> _innerRewrites;
|
||||
|
||||
private ExpressionRewrite()
|
||||
{
|
||||
_innerRewrites = new List<(string, ParameterExpression, ParameterExpression)>();
|
||||
}
|
||||
|
||||
public static Expression Rewrite(Expression expression)
|
||||
{
|
||||
return new ExpressionRewrite().Visit(expression);
|
||||
}
|
||||
|
||||
public static Expression<T> Rewrite<T>(Expression expression) where T : Delegate
|
||||
{
|
||||
return (Expression<T>)new ExpressionRewrite().Visit(expression);
|
||||
}
|
||||
|
||||
protected override Expression VisitMember(MemberExpression node)
|
||||
{
|
||||
(string inner, _, ParameterExpression p) = _innerRewrites.FirstOrDefault(x => x.param == node.Expression);
|
||||
if (inner != null)
|
||||
{
|
||||
Expression param = inner.Split('.').Aggregate<string, Expression>(p, Expression.Property);
|
||||
node = Expression.Property(param, node.Member.Name);
|
||||
}
|
||||
|
||||
// Can't use node.Member directly because we want to support attribute override
|
||||
MemberInfo member = node.Expression!.Type.GetProperty(node.Member.Name) ?? node.Member;
|
||||
ExpressionRewriteAttribute attr = member!.GetCustomAttribute<ExpressionRewriteAttribute>();
|
||||
if (attr == null)
|
||||
return base.VisitMember(node);
|
||||
|
||||
Expression property = attr.Link.Split('.').Aggregate(node.Expression, Expression.Property);
|
||||
if (property is MemberExpression expr)
|
||||
Visit(expr.Expression);
|
||||
_inner = attr.Inner;
|
||||
return property!;
|
||||
}
|
||||
|
||||
protected override Expression VisitLambda<T>(Expression<T> node)
|
||||
{
|
||||
(_, ParameterExpression oldParam, ParameterExpression param) = _innerRewrites
|
||||
.FirstOrDefault(x => node.Parameters.Any(y => y == x.param));
|
||||
if (param == null)
|
||||
return base.VisitLambda(node);
|
||||
|
||||
ParameterExpression[] newParams = node.Parameters.Where(x => x != oldParam).Append(param).ToArray();
|
||||
return Expression.Lambda(Visit(node.Body)!, newParams);
|
||||
}
|
||||
|
||||
protected override Expression VisitMethodCall(MethodCallExpression node)
|
||||
{
|
||||
int count = node.Arguments.Count;
|
||||
if (node.Object != null)
|
||||
count++;
|
||||
if (count != 2)
|
||||
return base.VisitMethodCall(node);
|
||||
|
||||
Expression instance = node.Object ?? node.Arguments.First();
|
||||
Expression argument = node.Object != null
|
||||
? node.Arguments.First()
|
||||
: node.Arguments[1];
|
||||
|
||||
Type oldType = instance.Type;
|
||||
instance = Visit(instance);
|
||||
if (instance!.Type == oldType)
|
||||
return base.VisitMethodCall(node);
|
||||
|
||||
if (_inner != null && argument is LambdaExpression lambda)
|
||||
{
|
||||
// TODO this type handler will usually work with IEnumerable & others but won't work with everything.
|
||||
Type type = oldType.GetGenericArguments().First();
|
||||
ParameterExpression oldParam = lambda.Parameters.FirstOrDefault(x => x.Type == type);
|
||||
if (oldParam != null)
|
||||
{
|
||||
Type newType = instance.Type.GetGenericArguments().First();
|
||||
ParameterExpression newParam = Expression.Parameter(newType, oldParam.Name);
|
||||
_innerRewrites.Add((_inner, oldParam, newParam));
|
||||
}
|
||||
}
|
||||
argument = Visit(argument);
|
||||
|
||||
// TODO this method handler may not work for some methods (ex: method taking a Fun<> method won't have good generic arguments)
|
||||
MethodInfo method = node.Method.IsGenericMethod
|
||||
? node.Method.GetGenericMethodDefinition().MakeGenericMethod(instance.Type.GetGenericArguments())
|
||||
: node.Method;
|
||||
return node.Object != null
|
||||
? Expression.Call(instance, method!, argument)
|
||||
: Expression.Call(null, method!, instance, argument!);
|
||||
}
|
||||
}
|
||||
}
|
||||
49
README.md
Normal file
49
README.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# DotExperiment
|
||||
|
||||
Dot experiments is a list of over engineered functions in dotnet.
|
||||
|
||||
## Expressions
|
||||
|
||||
A set of functions to convert and rewrite expressions. This allow users to transform expression's parameters & return type and rewrite accessors.
|
||||
|
||||
Expression Convertor Usage:
|
||||
```csharp
|
||||
Expression<Func<int, bool>> func = x => x > 100;
|
||||
Expression<Func<long, bool>> converted = ExpressionUtility.Convert<Func<long, bool>>(func);
|
||||
```
|
||||
|
||||
Expression Rewrite Usage:
|
||||
```csharp
|
||||
public class Parent
|
||||
{
|
||||
public ICollection<GenreLink> GenreLinks { get; set; }
|
||||
|
||||
[ExpressionRewrite(nameof(GenreLinks), nameof(GenreLink.Genre))]
|
||||
public ICollection<Genre> Genres
|
||||
{
|
||||
get => GenreLinks?.Select(x => x.Genre);
|
||||
set => GenreLinks = value?.Select(x => new GenreLink(this, x)).ToList();
|
||||
}
|
||||
}
|
||||
|
||||
public class Genre
|
||||
{
|
||||
public bool Enabled { get; set; }
|
||||
}
|
||||
|
||||
public class GenreLink
|
||||
{
|
||||
public Parent Parent { get ; set; }
|
||||
public Genre Genre { get; set; }
|
||||
|
||||
public GenreLink(Parent parent, Genre genre)
|
||||
{
|
||||
Parent = parent;
|
||||
Genre = genre;
|
||||
}
|
||||
}
|
||||
|
||||
Expression<Func<Parent, ICollection<Genre>>> = x => x.Genres.Any(y => y.Enabled);
|
||||
Expession rewrited = Expression.ExpressionRewrite(expression);
|
||||
// rewrited contains: x => x.GenreLinks.Any(y => y.Genre.Enabled);
|
||||
```
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v5.0", FrameworkDisplayName = "")]
|
||||
22
obj/Debug/net5.0/DotExperiments.AssemblyInfo.cs
Normal file
22
obj/Debug/net5.0/DotExperiments.AssemblyInfo.cs
Normal file
@@ -0,0 +1,22 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("DotExperiments")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("DotExperiments")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("DotExperiments")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
||||
1
obj/Debug/net5.0/DotExperiments.AssemblyInfoInputs.cache
Normal file
1
obj/Debug/net5.0/DotExperiments.AssemblyInfoInputs.cache
Normal file
@@ -0,0 +1 @@
|
||||
6578c792ece403e10aaf157c3825244f5d0ac4ef
|
||||
@@ -0,0 +1,8 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net5.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb =
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.PublishSingleFile =
|
||||
build_property.IncludeAllContentForSelfExtract =
|
||||
build_property._SupportedPlatformList = Android,iOS,Linux,macOS,Windows
|
||||
BIN
obj/Debug/net5.0/DotExperiments.assets.cache
Normal file
BIN
obj/Debug/net5.0/DotExperiments.assets.cache
Normal file
Binary file not shown.
BIN
obj/Debug/net5.0/DotExperiments.csprojAssemblyReference.cache
Normal file
BIN
obj/Debug/net5.0/DotExperiments.csprojAssemblyReference.cache
Normal file
Binary file not shown.
72
obj/DotExperiments.csproj.nuget.dgspec.json
Normal file
72
obj/DotExperiments.csproj.nuget.dgspec.json
Normal file
@@ -0,0 +1,72 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/DotExperiments.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/DotExperiments.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/DotExperiments.csproj",
|
||||
"projectName": "DotExperiments",
|
||||
"projectPath": "/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/DotExperiments.csproj",
|
||||
"packagesPath": "/home/anonymus-raccoon/.nuget/packages/",
|
||||
"outputPath": "/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"configFilePaths": [
|
||||
"/home/anonymus-raccoon/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net5.0"
|
||||
],
|
||||
"sources": {
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net5.0": {
|
||||
"targetAlias": "net5.0",
|
||||
"projectReferences": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
}
|
||||
},
|
||||
"frameworks": {
|
||||
"net5.0": {
|
||||
"targetAlias": "net5.0",
|
||||
"dependencies": {
|
||||
"JetBrains.Annotations": {
|
||||
"target": "Package",
|
||||
"version": "[2020.3.0, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"downloadDependencies": [
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App.Ref",
|
||||
"version": "[5.0.0, 5.0.0]"
|
||||
}
|
||||
],
|
||||
"frameworkReferences": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/5.0.201/RuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
18
obj/DotExperiments.csproj.nuget.g.props
Normal file
18
obj/DotExperiments.csproj.nuget.g.props
Normal file
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/anonymus-raccoon/.nuget/packages/</NuGetPackageRoot>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/anonymus-raccoon/.nuget/packages/</NuGetPackageFolders>
|
||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.8.0</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="$([MSBuild]::EnsureTrailingSlash($(NuGetPackageFolders)))" />
|
||||
</ItemGroup>
|
||||
<PropertyGroup>
|
||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
6
obj/DotExperiments.csproj.nuget.g.targets
Normal file
6
obj/DotExperiments.csproj.nuget.g.targets
Normal file
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
112
obj/project.assets.json
Normal file
112
obj/project.assets.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"version": 3,
|
||||
"targets": {
|
||||
"net5.0": {
|
||||
"JetBrains.Annotations/2020.3.0": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/netstandard2.0/JetBrains.Annotations.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/JetBrains.Annotations.dll": {}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"JetBrains.Annotations/2020.3.0": {
|
||||
"sha512": "FnX06vtxuoZnhZdR6UHt5kJ7HUC/syODfGLnhPDn1x5sXvvepNyCl4jMtPUzJfsPWh7q0Jo+AIYz5xaVbbyikA==",
|
||||
"type": "package",
|
||||
"path": "jetbrains.annotations/2020.3.0",
|
||||
"files": [
|
||||
".nupkg.metadata",
|
||||
".signature.p7s",
|
||||
"icon.png",
|
||||
"jetbrains.annotations.2020.3.0.nupkg.sha512",
|
||||
"jetbrains.annotations.nuspec",
|
||||
"lib/net20/JetBrains.Annotations.dll",
|
||||
"lib/net20/JetBrains.Annotations.xml",
|
||||
"lib/netstandard1.0/JetBrains.Annotations.deps.json",
|
||||
"lib/netstandard1.0/JetBrains.Annotations.dll",
|
||||
"lib/netstandard1.0/JetBrains.Annotations.xml",
|
||||
"lib/netstandard2.0/JetBrains.Annotations.deps.json",
|
||||
"lib/netstandard2.0/JetBrains.Annotations.dll",
|
||||
"lib/netstandard2.0/JetBrains.Annotations.xml",
|
||||
"lib/portable40-net40+sl5+win8+wp8+wpa81/JetBrains.Annotations.dll",
|
||||
"lib/portable40-net40+sl5+win8+wp8+wpa81/JetBrains.Annotations.xml"
|
||||
]
|
||||
}
|
||||
},
|
||||
"projectFileDependencyGroups": {
|
||||
"net5.0": [
|
||||
"JetBrains.Annotations >= 2020.3.0"
|
||||
]
|
||||
},
|
||||
"packageFolders": {
|
||||
"/home/anonymus-raccoon/.nuget/packages/": {}
|
||||
},
|
||||
"project": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/DotExperiments.csproj",
|
||||
"projectName": "DotExperiments",
|
||||
"projectPath": "/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/DotExperiments.csproj",
|
||||
"packagesPath": "/home/anonymus-raccoon/.nuget/packages/",
|
||||
"outputPath": "/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"configFilePaths": [
|
||||
"/home/anonymus-raccoon/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net5.0"
|
||||
],
|
||||
"sources": {
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net5.0": {
|
||||
"targetAlias": "net5.0",
|
||||
"projectReferences": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
}
|
||||
},
|
||||
"frameworks": {
|
||||
"net5.0": {
|
||||
"targetAlias": "net5.0",
|
||||
"dependencies": {
|
||||
"JetBrains.Annotations": {
|
||||
"target": "Package",
|
||||
"version": "[2020.3.0, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"downloadDependencies": [
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App.Ref",
|
||||
"version": "[5.0.0, 5.0.0]"
|
||||
}
|
||||
],
|
||||
"frameworkReferences": {
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/5.0.201/RuntimeIdentifierGraph.json"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
obj/project.nuget.cache
Normal file
11
obj/project.nuget.cache
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "TZ/lo70fwlMcZSdro2yXAU3eCKzcvh30saL/a5culOGYgmYHy/9ylZJTi8NHW6YJKb33mZy3Xc2lb0OQ1gSsPg==",
|
||||
"success": true,
|
||||
"projectFilePath": "/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/DotExperiments.csproj",
|
||||
"expectedPackageFiles": [
|
||||
"/home/anonymus-raccoon/.nuget/packages/jetbrains.annotations/2020.3.0/jetbrains.annotations.2020.3.0.nupkg.sha512",
|
||||
"/home/anonymus-raccoon/.nuget/packages/microsoft.aspnetcore.app.ref/5.0.0/microsoft.aspnetcore.app.ref.5.0.0.nupkg.sha512"
|
||||
],
|
||||
"logs": []
|
||||
}
|
||||
1
obj/project.packagespec.json
Normal file
1
obj/project.packagespec.json
Normal file
@@ -0,0 +1 @@
|
||||
"version":"1.0.0","restore":{"projectUniqueName":"/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/DotExperiments.csproj","projectName":"DotExperiments","projectPath":"/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/DotExperiments.csproj","outputPath":"/home/anonymus-raccoon/Projects/Kyoo/DotExperiments/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net5.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net5.0":{"targetAlias":"net5.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]}}"frameworks":{"net5.0":{"targetAlias":"net5.0","dependencies":{"JetBrains.Annotations":{"target":"Package","version":"[2020.3.0, )"}},"imports":["net461","net462","net47","net471","net472","net48"],"assetTargetFallback":true,"warn":true,"downloadDependencies":[{"name":"Microsoft.AspNetCore.App.Ref","version":"[5.0.0, 5.0.0]"}],"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/share/dotnet/sdk/5.0.201/RuntimeIdentifierGraph.json"}}
|
||||
1
obj/rider.project.restore.info
Normal file
1
obj/rider.project.restore.info
Normal file
@@ -0,0 +1 @@
|
||||
16159886511185361
|
||||
Reference in New Issue
Block a user