Skip to content

Commit 57562ab

Browse files
author
Tom Laird-McConnell
authored
Restore InMemory and CachingBotStore to 3.13 implementations (#4810)
* restore InMemory and CachingStore implementations * bump version to 3.15.3.0
1 parent 0631d06 commit 57562ab

File tree

18 files changed

+66
-78
lines changed

18 files changed

+66
-78
lines changed

CSharp/Library/Microsoft.Bot.Builder.Autofac/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
// You can specify all the values or you can default the Build and Revision Numbers
3333
// by using the '*' as shown below:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("3.15.2.3")]
36-
[assembly: AssemblyFileVersion("3.15.2.3")]
35+
[assembly: AssemblyVersion("3.15.3.0")]
36+
[assembly: AssemblyFileVersion("3.15.3.0")]
3737

3838
[assembly: InternalsVisibleTo("Microsoft.Bot.Builder.Tests")]
3939
[assembly: InternalsVisibleTo("Microsoft.Bot.Sample.Tests")]

CSharp/Library/Microsoft.Bot.Builder.Calling/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
// You can specify all the values or you can default the Build and Revision Numbers
3232
// by using the '*' as shown below:
3333
// [assembly: AssemblyVersion("1.0.*")]
34-
[assembly: AssemblyVersion("3.15.2.3")]
35-
[assembly: AssemblyFileVersion("3.15.2.3")]
34+
[assembly: AssemblyVersion("3.15.3.0")]
35+
[assembly: AssemblyFileVersion("3.15.3.0")]
3636

3737
//[assembly: AssemblyKeyFileAttribute(@"..\\..\\buildtools\\35MSSharedLib1024.snk")]
3838
//[assembly: AssemblyDelaySignAttribute(true)]

CSharp/Library/Microsoft.Bot.Builder.FormFlow.Json/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
// You can specify all the values or you can default the Build and Revision Numbers
3434
// by using the '*' as shown below:
3535
// [assembly: AssemblyVersion("1.0.*")]
36-
[assembly: AssemblyVersion("3.15.2.3")]
37-
[assembly: AssemblyFileVersion("3.15.2.3")]
36+
[assembly: AssemblyVersion("3.15.3.0")]
37+
[assembly: AssemblyFileVersion("3.15.3.0")]
3838

3939
[assembly: InternalsVisibleTo("Microsoft.Bot.Builder.Tests")]
4040
[assembly: InternalsVisibleTo("Microsoft.Bot.Sample.Tests")]

CSharp/Library/Microsoft.Bot.Builder.History/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
// You can specify all the values or you can default the Build and Revision Numbers
3232
// by using the '*' as shown below:
3333
// [assembly: AssemblyVersion("1.0.*")]
34-
[assembly: AssemblyVersion("3.15.2.3")]
35-
[assembly: AssemblyFileVersion("3.15.2.3")]
34+
[assembly: AssemblyVersion("3.15.3.0")]
35+
[assembly: AssemblyFileVersion("3.15.3.0")]
3636

3737
//[assembly: AssemblyKeyFileAttribute(@"..\\..\\buildtools\\35MSSharedLib1024.snk")]
3838
//[assembly: AssemblyDelaySignAttribute(true)]

CSharp/Library/Microsoft.Bot.Builder/ConnectorEx/BotData.cs

Lines changed: 35 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -87,30 +87,25 @@ public interface IBotDataStore<T>
8787
}
8888

8989
/// <summary>
90-
/// Volatile in-memory implementation of <see cref="IBotDataStore{BotData}"/>
90+
/// Volitile in-memory implementation of <see cref="IBotDataStore{BotData}"/>
9191
/// </summary>
92+
/// <remarks>
93+
/// NOTE: This uses an internal dictionary with no culling so it should not be used for production code at all, as it will eventually just use all of your memory.
94+
/// </remarks>
9295
public class InMemoryDataStore : IBotDataStore<BotData>
9396
{
94-
// This should be moved to autofac registration
95-
internal static readonly MemoryCache store = new MemoryCache(nameof(InMemoryDataStore), new NameValueCollection() { { "PhysicalMemoryLimitPercentage", "50" } });
96-
97-
private static CacheItemPolicy cacheItemPolicy = new CacheItemPolicy() { SlidingExpiration = TimeSpan.FromMinutes(15) };
98-
97+
internal readonly ConcurrentDictionary<string, string> store = new ConcurrentDictionary<string, string>();
9998
private readonly Dictionary<BotStoreType, object> locks = new Dictionary<BotStoreType, object>()
10099
{
101100
{ BotStoreType.BotConversationData, new object() },
102101
{ BotStoreType.BotPrivateConversationData, new object() },
103102
{ BotStoreType.BotUserData, new object() }
104103
};
105104

106-
public InMemoryDataStore()
107-
{
108-
}
109-
110105
async Task<BotData> IBotDataStore<BotData>.LoadAsync(IAddress key, BotStoreType botStoreType, CancellationToken cancellationToken)
111106
{
112-
string serializedData = (string)store.Get(GetKey(key, botStoreType));
113-
if (serializedData != null)
107+
string serializedData;
108+
if (store.TryGetValue(GetKey(key, botStoreType), out serializedData))
114109
return Deserialize(serializedData);
115110
return new BotData(eTag: String.Empty);
116111
}
@@ -119,24 +114,27 @@ async Task IBotDataStore<BotData>.SaveAsync(IAddress key, BotStoreType botStoreT
119114
{
120115
lock (locks[botStoreType])
121116
{
122-
string storeKey = GetKey(key, botStoreType);
123-
string oldValue = (string)store.Get(storeKey);
124117
if (botData.Data != null)
125118
{
126-
if (oldValue != null)
119+
store.AddOrUpdate(GetKey(key, botStoreType), (dictionaryKey) =>
127120
{
128-
ValidateETag(botData, oldValue);
129-
}
130-
botData.ETag = Guid.NewGuid().ToString("n");
131-
store.Set(GetKey(key, botStoreType), Serialize(botData), cacheItemPolicy);
121+
botData.ETag = Guid.NewGuid().ToString("n");
122+
return Serialize(botData);
123+
}, (dictionaryKey, value) =>
124+
{
125+
ValidateETag(botData, value);
126+
botData.ETag = Guid.NewGuid().ToString("n");
127+
return Serialize(botData);
128+
});
132129
}
133130
else
134131
{
135132
// remove record on null
136-
if (oldValue != null)
133+
string value;
134+
if (store.TryGetValue(GetKey(key, botStoreType), out value))
137135
{
138-
ValidateETag(botData, oldValue);
139-
store.Remove(storeKey);
136+
ValidateETag(botData, value);
137+
store.TryRemove(GetKey(key, botStoreType), out value);
140138
return;
141139
}
142140
}
@@ -258,14 +256,14 @@ public enum CachingBotDataStoreConsistencyPolicy
258256
}
259257

260258
/// <summary>
261-
/// Caches data for <see cref="BotDataBase{T}"/> and wraps the data in <see cref="BotData"/> to be stored in <see cref="CachingBotDataStore.inner"/>
259+
/// Caches changes until FlushAsync() is called
260+
/// NOTE: Despite the name, this is NOT a cache of access of the inner store, but is a change cache of changes that will be pushed to
261+
/// inner store.
262262
/// </summary>
263263
public class CachingBotDataStore : IBotDataStore<BotData>
264264
{
265265
private readonly IBotDataStore<BotData> inner;
266-
// this should be moved to autofac registration
267-
internal static readonly MemoryCache cache = new MemoryCache(nameof(CachingBotDataStore), new NameValueCollection() { { "PhysicalMemoryLimitPercentage", "50" } });
268-
internal static CacheItemPolicy cacheItemPolicy = new CacheItemPolicy() { SlidingExpiration = TimeSpan.FromMinutes(15) };
266+
internal readonly Dictionary<IAddress, CacheEntry> cache = new Dictionary<IAddress, CacheEntry>();
269267
private readonly CachingBotDataStoreConsistencyPolicy dataConsistencyPolicy;
270268

271269
public CachingBotDataStore(IBotDataStore<BotData> inner, CachingBotDataStoreConsistencyPolicy dataConsistencyPolicy)
@@ -274,31 +272,23 @@ public CachingBotDataStore(IBotDataStore<BotData> inner, CachingBotDataStoreCons
274272
this.dataConsistencyPolicy = dataConsistencyPolicy;
275273
}
276274

277-
public long GetCount() { return cache.GetCount(); }
278-
279275
internal class CacheEntry
280276
{
281277
public BotData BotConversationData { set; get; }
282278
public BotData BotPrivateConversationData { set; get; }
283279
public BotData BotUserData { set; get; }
284280
}
285281

286-
private string GetCacheKey(IAddress key)
287-
{
288-
return $"{key.BotId}.{key.ChannelId}.{key.ConversationId}.{key.UserId}";
289-
}
290-
291282
async Task<bool> IBotDataStore<BotData>.FlushAsync(IAddress key, CancellationToken cancellationToken)
292283
{
293-
var cacheKey = GetCacheKey(key);
294-
CacheEntry entry = (CacheEntry)cache.Get(GetCacheKey(key));
295-
if (entry != null)
284+
CacheEntry entry;
285+
if (cache.TryGetValue(key, out entry))
296286
{
297287
// Removing the cached entry to make sure that we are not leaking
298288
// flushed entries when CachingBotDataStore is registered as a singleton object.
299289
// Also since this store is not updating ETags on LoadAsync(...), there
300290
// will be a conflict if we reuse the cached entries after flush.
301-
cache.Remove(cacheKey);
291+
cache.Remove(key);
302292
await this.Save(key, entry, cancellationToken);
303293
return true;
304294
}
@@ -310,13 +300,12 @@ async Task<bool> IBotDataStore<BotData>.FlushAsync(IAddress key, CancellationTok
310300

311301
async Task<BotData> IBotDataStore<BotData>.LoadAsync(IAddress key, BotStoreType botStoreType, CancellationToken cancellationToken)
312302
{
313-
var cacheKey = GetCacheKey(key);
314-
CacheEntry cacheEntry = (CacheEntry)cache.Get(GetCacheKey(key));
303+
CacheEntry cacheEntry;
315304
BotData value = null;
316-
if (cacheEntry == null)
305+
if (!cache.TryGetValue(key, out cacheEntry))
317306
{
318307
cacheEntry = new CacheEntry();
319-
cache.Add(cacheKey, cacheEntry, cacheItemPolicy);
308+
cache.Add(key, cacheEntry);
320309
value = await LoadFromInnerAndCache(cacheEntry, botStoreType, key, cancellationToken);
321310
}
322311
else
@@ -356,15 +345,14 @@ async Task<BotData> IBotDataStore<BotData>.LoadAsync(IAddress key, BotStoreType
356345

357346
async Task IBotDataStore<BotData>.SaveAsync(IAddress key, BotStoreType botStoreType, BotData value, CancellationToken cancellationToken)
358347
{
359-
var cacheKey = GetCacheKey(key);
360-
CacheEntry cacheEntry = (CacheEntry)cache.Get(GetCacheKey(key));
361-
if (cacheEntry == null)
348+
CacheEntry entry;
349+
if (!cache.TryGetValue(key, out entry))
362350
{
363-
cacheEntry = new CacheEntry();
364-
cache.Add(cacheKey, cacheEntry, cacheItemPolicy);
351+
entry = new CacheEntry();
352+
cache.Add(key, entry);
365353
}
366354

367-
SetCachedValue(cacheEntry, botStoreType, value);
355+
SetCachedValue(entry, botStoreType, value);
368356
}
369357

370358
private async Task<BotData> LoadFromInnerAndCache(CacheEntry cacheEntry, BotStoreType botStoreType, IAddress key, CancellationToken token)

CSharp/Library/Microsoft.Bot.Builder/Microsoft.Bot.Builder.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<dependency id="Autofac" version="3.5.2"/>
2929
<dependency id="Chronic.Signed" version="0.3.2" />
3030
<dependency id="Microsoft.AspNet.WebAPI.Core" version="5.2.3" />
31-
<dependency id="Microsoft.Bot.Connector" version="3.15.2.3" />
31+
<dependency id="Microsoft.Bot.Connector" version="3.15.3.0" />
3232
<dependency id="Microsoft.Rest.ClientRuntime" version="2.3.2" />
3333
<dependency id="Newtonsoft.Json" version="9.0.1" />
3434
<dependency id="System.IdentityModel.Tokens.Jwt" version="5.1.4" />

CSharp/Library/Microsoft.Bot.Builder/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
// You can specify all the values or you can default the Build and Revision Numbers
3434
// by using the '*' as shown below:
3535
// [assembly: AssemblyVersion("1.0.*")]
36-
[assembly: AssemblyVersion("3.15.2.3")]
37-
[assembly: AssemblyFileVersion("3.15.2.3")]
36+
[assembly: AssemblyVersion("3.15.3.0")]
37+
[assembly: AssemblyFileVersion("3.15.3.0")]
3838

3939

4040
[assembly: InternalsVisibleTo("Microsoft.Bot.Builder.Tests")]

CSharp/Library/Microsoft.Bot.Connector.AspNetCore/Microsoft.Bot.Connector.AspNetCore.nuspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
33
<metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
44
<id>Microsoft.Bot.Connector.AspNetCore</id>
5-
<version>1.1.3.16</version>
5+
<version>1.1.3.17</version>
66
<authors>Microsoft</authors>
77
<owners>microsoft, BotFramework, nugetbotbuilder </owners>
88
<iconUrl>https://bots.botframework.com/Client/Images/bot-framework-default-7.png</iconUrl>
@@ -22,7 +22,7 @@
2222
<dependency id="Newtonsoft.Json" version="9.0.1" />
2323
<dependency id="System.IdentityModel.Tokens.Jwt" version="5.1.4" />
2424
<dependency id="Microsoft.AspNetCore.Mvc.Core" version="1.1.4" />
25-
<dependency id="Microsoft.Bot.Connector" version="3.15.2.3" />
25+
<dependency id="Microsoft.Bot.Connector" version="3.15.3.0" />
2626
</group>
2727
</dependencies>
2828
</metadata>

CSharp/Library/Microsoft.Bot.Connector.AspNetCore/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
[assembly: AssemblyCulture("")]
1313

1414

15-
[assembly: AssemblyVersion("1.1.3.16")]
16-
[assembly: AssemblyFileVersion("1.1.3.16")]
15+
[assembly: AssemblyVersion("1.1.3.17")]
16+
[assembly: AssemblyFileVersion("1.1.3.17")]
1717

1818
//[assembly: AssemblyKeyFileAttribute(@"..\\..\\buildtools\\35MSSharedLib1024.snk")]
1919
//[assembly: AssemblyDelaySignAttribute(true)]

CSharp/Library/Microsoft.Bot.Connector.AspNetCore2/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
[assembly: AssemblyCulture("")]
1111

1212

13-
[assembly: AssemblyVersion("2.0.1.8")]
14-
[assembly: AssemblyFileVersion("2.0.1.8")]
13+
[assembly: AssemblyVersion("2.0.1.9")]
14+
[assembly: AssemblyFileVersion("2.0.1.9")]
1515

1616
//[assembly: AssemblyKeyFileAttribute(@"..\\..\\buildtools\\35MSSharedLib1024.snk")]
1717
//[assembly: AssemblyDelaySignAttribute(true)]

CSharp/Library/Microsoft.Bot.Connector.AspNetCore2/Microsoft.Bot.Connector.AspNetCore2.nuspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
33
<metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
44
<id>Microsoft.Bot.Connector.AspNetCore</id>
5-
<version>2.0.1.8</version>
5+
<version>2.0.1.9</version>
66
<authors>Microsoft</authors>
77
<owners>microsoft, BotFramework, nugetbotbuilder </owners>
88
<iconUrl>https://bots.botframework.com/Client/Images/bot-framework-default-7.png</iconUrl>
@@ -19,7 +19,7 @@
1919
<dependency id="Microsoft.AspNetCore.Authentication.JwtBearer" version="2.0.0" />
2020
<dependency id="Microsoft.AspNetCore.Mvc" version="2.0.0" />
2121
<dependency id="Microsoft.Rest.ClientRuntime" version="2.3.10" />
22-
<dependency id="Microsoft.Bot.Connector" version="3.15.2.3" />
22+
<dependency id="Microsoft.Bot.Connector" version="3.15.3.0" />
2323
</group>
2424
</dependencies>
2525
</metadata>

CSharp/Library/Microsoft.Bot.Connector.Falcon/Microsoft.Bot.Connector.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
33
<metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
44
<id>Microsoft.Bot.Connector</id>
5-
<version>3.15.2.3</version>
5+
<version>3.15.3.0</version>
66
<authors>Microsoft</authors>
77
<owners>microsoft, BotFramework, nugetbotbuilder </owners>
88
<iconUrl>https://bots.botframework.com/Client/Images/bot-framework-default-7.png</iconUrl>

CSharp/Library/Microsoft.Bot.Connector.Falcon/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
[assembly: AssemblyTrademark("")]
1111
[assembly: AssemblyCulture("")]
1212

13-
[assembly: AssemblyVersion("3.15.2.3")]
14-
[assembly: AssemblyFileVersion("3.15.2.3")]
13+
[assembly: AssemblyVersion("3.15.3.0")]
14+
[assembly: AssemblyFileVersion("3.15.3.0")]
1515

1616
//[assembly: AssemblyKeyFileAttribute(@"..\\..\\buildtools\\35MSSharedLib1024.snk")]
1717
//[assembly: AssemblyDelaySignAttribute(true)]

CSharp/Library/Microsoft.Bot.Connector.NetCore/Microsoft.Bot.Connector.NetCore.nuget.props

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
44
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
55
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
6-
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">C:\Github\Microsoft\BotBuilder\CSharp\Library\Microsoft.Bot.Connector.NetCore\project.lock.json</ProjectAssetsFile>
6+
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">C:\source\github\BotBuilder\CSharp\Library\Microsoft.Bot.Connector.NetCore\project.lock.json</ProjectAssetsFile>
77
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
8-
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\V-BRHALE\.nuget\packages\</NuGetPackageFolders>
8+
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\tomlm\.nuget\packages\</NuGetPackageFolders>
99
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">ProjectJson</NuGetProjectStyle>
1010
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">4.7.0</NuGetToolVersion>
1111
</PropertyGroup>
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using System.Reflection;
22
using System.Resources;
33

4-
[assembly: AssemblyVersion("3.15.2.3")]
5-
[assembly: AssemblyFileVersion("3.15.2.3")]
4+
[assembly: AssemblyVersion("3.15.3.0")]
5+
[assembly: AssemblyFileVersion("3.15.3.0")]
66

77
//[assembly: AssemblyKeyFileAttribute(@"..\\..\\buildtools\\35MSSharedLib1024.snk")]
88
//[assembly: AssemblyDelaySignAttribute(true)]

CSharp/Library/Microsoft.Bot.Connector.NetFramework/Microsoft.Bot.Connector.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
33
<metadata xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
44
<id>Microsoft.Bot.Connector</id>
5-
<version>3.15.2.3</version>
5+
<version>3.15.3.0</version>
66
<authors>Microsoft</authors>
77
<owners>microsoft, BotFramework, nugetbotbuilder </owners>
88
<iconUrl>https://bots.botframework.com/Client/Images/bot-framework-default-7.png</iconUrl>

CSharp/Library/Microsoft.Bot.Connector.NetFramework/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
[assembly: AssemblyTrademark("")]
1111
[assembly: AssemblyCulture("")]
1212

13-
[assembly: AssemblyVersion("3.15.2.3")]
14-
[assembly: AssemblyFileVersion("3.15.2.3")]
13+
[assembly: AssemblyVersion("3.15.3.0")]
14+
[assembly: AssemblyFileVersion("3.15.3.0")]
1515

1616
//[assembly: AssemblyKeyFileAttribute(@"..\\..\\buildtools\\35MSSharedLib1024.snk")]
1717
//[assembly: AssemblyDelaySignAttribute(true)]
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using System.Reflection;
22
using System.Runtime.InteropServices;
33

4-
[assembly: AssemblyVersion("3.15.2.3")]
5-
[assembly: AssemblyFileVersion("3.15.2.3")]
4+
[assembly: AssemblyVersion("3.15.3.0")]
5+
[assembly: AssemblyFileVersion("3.15.3.0")]
66

77
//[assembly: AssemblyKeyFileAttribute(@"..\\..\\buildtools\\35MSSharedLib1024.snk")]
88
//[assembly: AssemblyDelaySignAttribute(true)]

0 commit comments

Comments
 (0)