Skip to content

Commit cf8326c

Browse files
fix stack overflow when overriding HttpClientHandler.SendAsync() (#367)
* add app that reproduces issue * clean up comments * update props to only include dll/so files * add opcode parameter to DynamicMethodBuilder methods and use it when emitting IL * add an additional argument to every wrapper method with the original call's opcode (value not used yet) * split HttpMessageHandlerIntegration into separate wrappers, use new opcode argument to emit the correct IL * keep using CALL for static method calls * fix build error in AutomapperTest project * fix integrations.json * rename several variables for clarity * include profiler pdb files in sample projects * add test to ensure all wrapper methods have the last "int opCode" parameter
1 parent 98e83fa commit cf8326c

26 files changed

+387
-140
lines changed

Datadog.Trace.sln

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@ EndProject
141141
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Samples.WebForms", "samples-aspnet\Samples.WebForms\Samples.WebForms.csproj", "{99A62CCF-8E7F-4D57-8383-D38C371C8087}"
142142
EndProject
143143
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "reproductions", "reproductions", "{550AE553-2BBB-4021-B55A-137EF31A6B1F}"
144+
ProjectSection(SolutionItems) = preProject
145+
reproductions\Directory.Build.props = reproductions\Directory.Build.props
146+
EndProjectSection
144147
EndProject
145148
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExpenseItDemo", "reproductions\Reproduction.Wpf.ExpenseIt\ExpenseIt\ExpenseItDemo\ExpenseItDemo.csproj", "{D1729F17-99A5-45AF-AB38-72FA6ECCE609}"
146149
EndProject
@@ -151,6 +154,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AutomapperTest", "reproduct
151154
{C0C8D381-D6B9-4C76-9428-F40F2FA93A9A} = {C0C8D381-D6B9-4C76-9428-F40F2FA93A9A}
152155
EndProjectSection
153156
EndProject
157+
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HttpMessageHandler.StackOverflow", "reproductions\HttpMessageHandler.StackOverflow\HttpMessageHandler.StackOverflow.csproj", "{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}"
158+
ProjectSection(ProjectDependencies) = postProject
159+
{C0C8D381-D6B9-4C76-9428-F40F2FA93A9A} = {C0C8D381-D6B9-4C76-9428-F40F2FA93A9A}
160+
EndProjectSection
161+
EndProject
154162
Global
155163
GlobalSection(SolutionConfigurationPlatforms) = preSolution
156164
Debug|Any CPU = Debug|Any CPU
@@ -501,6 +509,16 @@ Global
501509
{2AD18622-9A02-41B4-915E-798BD64044D5}.Release|x64.Build.0 = Release|x64
502510
{2AD18622-9A02-41B4-915E-798BD64044D5}.Release|x86.ActiveCfg = Release|x86
503511
{2AD18622-9A02-41B4-915E-798BD64044D5}.Release|x86.Build.0 = Release|x86
512+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Debug|Any CPU.ActiveCfg = Debug|x86
513+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Debug|x64.ActiveCfg = Debug|x64
514+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Debug|x64.Build.0 = Debug|x64
515+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Debug|x86.ActiveCfg = Debug|x86
516+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Debug|x86.Build.0 = Debug|x86
517+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Release|Any CPU.ActiveCfg = Release|x86
518+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Release|x64.ActiveCfg = Release|x64
519+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Release|x64.Build.0 = Release|x64
520+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Release|x86.ActiveCfg = Release|x86
521+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC}.Release|x86.Build.0 = Release|x86
504522
EndGlobalSection
505523
GlobalSection(SolutionProperties) = preSolution
506524
HideSolutionNode = FALSE
@@ -537,6 +555,7 @@ Global
537555
{D1729F17-99A5-45AF-AB38-72FA6ECCE609} = {550AE553-2BBB-4021-B55A-137EF31A6B1F}
538556
{AD119B05-A092-41AD-B68E-4AE2DB5A96D9} = {AA6F5582-3B71-49AC-AA39-8F7815AC46BE}
539557
{2AD18622-9A02-41B4-915E-798BD64044D5} = {550AE553-2BBB-4021-B55A-137EF31A6B1F}
558+
{F47F206E-4CCA-4AD0-AEBA-FD9F491E05EC} = {550AE553-2BBB-4021-B55A-137EF31A6B1F}
540559
EndGlobalSection
541560
GlobalSection(ExtensibilityGlobals) = postSolution
542561
SolutionGuid = {160A1D00-1F5B-40F8-A155-621B4459D78F}

integrations.json

Lines changed: 33 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
2020
"type": "Datadog.Trace.ClrProfiler.Integrations.AdoNetIntegration",
2121
"method": "ExecuteDbDataReader",
22-
"signature": "00 02 1C 1C 08"
22+
"signature": "00 03 1C 1C 08 08"
2323
}
2424
},
2525
{
@@ -39,7 +39,7 @@
3939
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
4040
"type": "Datadog.Trace.ClrProfiler.Integrations.AdoNetIntegration",
4141
"method": "ExecuteDbDataReader",
42-
"signature": "00 02 1C 1C 08"
42+
"signature": "00 03 1C 1C 08 08"
4343
}
4444
},
4545
{
@@ -59,7 +59,7 @@
5959
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
6060
"type": "Datadog.Trace.ClrProfiler.Integrations.AdoNetIntegration",
6161
"method": "ExecuteDbDataReaderAsync",
62-
"signature": "00 03 1C 1C 08 1C"
62+
"signature": "00 04 1C 1C 08 1C 08"
6363
}
6464
},
6565
{
@@ -79,7 +79,7 @@
7979
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
8080
"type": "Datadog.Trace.ClrProfiler.Integrations.AdoNetIntegration",
8181
"method": "ExecuteDbDataReaderAsync",
82-
"signature": "00 03 1C 1C 08 1C"
82+
"signature": "00 04 1C 1C 08 1C 08"
8383
}
8484
}
8585
]
@@ -106,7 +106,7 @@
106106
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
107107
"type": "Datadog.Trace.ClrProfiler.Integrations.AspNetCoreMvc2Integration",
108108
"method": "BeforeAction",
109-
"signature": "00 04 01 1C 1C 1C 1C"
109+
"signature": "00 05 01 1C 1C 1C 1C 08"
110110
}
111111
},
112112
{
@@ -128,7 +128,7 @@
128128
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
129129
"type": "Datadog.Trace.ClrProfiler.Integrations.AspNetCoreMvc2Integration",
130130
"method": "AfterAction",
131-
"signature": "00 04 01 1C 1C 1C 1C"
131+
"signature": "00 05 01 1C 1C 1C 1C 08"
132132
}
133133
},
134134
{
@@ -150,7 +150,7 @@
150150
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
151151
"type": "Datadog.Trace.ClrProfiler.Integrations.AspNetCoreMvc2Integration",
152152
"method": "Rethrow",
153-
"signature": "00 01 01 1C"
153+
"signature": "00 02 01 1C 08"
154154
}
155155
}
156156
]
@@ -177,7 +177,7 @@
177177
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
178178
"type": "Datadog.Trace.ClrProfiler.Integrations.AspNetMvcIntegration",
179179
"method": "BeginInvokeAction",
180-
"signature": "00 05 1C 1C 1C 1C 1C 1C"
180+
"signature": "00 06 1C 1C 1C 1C 1C 1C 08"
181181
}
182182
},
183183
{
@@ -199,7 +199,7 @@
199199
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
200200
"type": "Datadog.Trace.ClrProfiler.Integrations.AspNetMvcIntegration",
201201
"method": "EndInvokeAction",
202-
"signature": "00 02 02 1C 1C"
202+
"signature": "00 03 02 1C 1C 08"
203203
}
204204
}
205205
]
@@ -224,7 +224,7 @@
224224
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
225225
"type": "Datadog.Trace.ClrProfiler.Integrations.AspNetWebApi2Integration",
226226
"method": "ExecuteAsync",
227-
"signature": "00 03 1C 1C 1C 1C"
227+
"signature": "00 04 1C 1C 1C 1C 08"
228228
}
229229
}
230230
]
@@ -251,7 +251,7 @@
251251
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
252252
"type": "Datadog.Trace.ClrProfiler.Integrations.ElasticsearchNet5Integration",
253253
"method": "CallElasticsearch",
254-
"signature": "10 01 02 1C 1C 1C"
254+
"signature": "10 01 03 1C 1C 1C 08"
255255
}
256256
},
257257
{
@@ -273,7 +273,7 @@
273273
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
274274
"type": "Datadog.Trace.ClrProfiler.Integrations.ElasticsearchNet5Integration",
275275
"method": "CallElasticsearchAsync",
276-
"signature": "10 01 03 1C 1C 1C 1C"
276+
"signature": "10 01 04 1C 1C 1C 1C 08"
277277
}
278278
}
279279
]
@@ -300,7 +300,7 @@
300300
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
301301
"type": "Datadog.Trace.ClrProfiler.Integrations.ElasticsearchNet6Integration",
302302
"method": "CallElasticsearch",
303-
"signature": "10 01 02 1C 1C 1C"
303+
"signature": "10 01 03 1C 1C 1C 08"
304304
}
305305
},
306306
{
@@ -322,7 +322,7 @@
322322
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
323323
"type": "Datadog.Trace.ClrProfiler.Integrations.ElasticsearchNet6Integration",
324324
"method": "CallElasticsearchAsync",
325-
"signature": "10 01 03 1C 1C 1C 1C"
325+
"signature": "10 01 04 1C 1C 1C 1C 08"
326326
}
327327
}
328328
]
@@ -346,8 +346,8 @@
346346
"wrapper": {
347347
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
348348
"type": "Datadog.Trace.ClrProfiler.Integrations.HttpMessageHandlerIntegration",
349-
"method": "SendAsync",
350-
"signature": "00 03 1C 1C 1C 1C"
349+
"method": "HttpMessageHandler_SendAsync",
350+
"signature": "00 04 1C 1C 1C 1C 08"
351351
}
352352
},
353353
{
@@ -366,8 +366,8 @@
366366
"wrapper": {
367367
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
368368
"type": "Datadog.Trace.ClrProfiler.Integrations.HttpMessageHandlerIntegration",
369-
"method": "SendAsync",
370-
"signature": "00 03 1C 1C 1C 1C"
369+
"method": "HttpClientHandler_SendAsync",
370+
"signature": "00 04 1C 1C 1C 1C 08"
371371
}
372372
}
373373
]
@@ -392,7 +392,7 @@
392392
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
393393
"type": "Datadog.Trace.ClrProfiler.Integrations.MongoDbIntegration",
394394
"method": "Execute",
395-
"signature": "00 03 1C 1C 1C 1C"
395+
"signature": "00 04 1C 1C 1C 1C 08"
396396
}
397397
},
398398
{
@@ -412,7 +412,7 @@
412412
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
413413
"type": "Datadog.Trace.ClrProfiler.Integrations.MongoDbIntegration",
414414
"method": "Execute",
415-
"signature": "00 03 1C 1C 1C 1C"
415+
"signature": "00 04 1C 1C 1C 1C 08"
416416
}
417417
},
418418
{
@@ -432,7 +432,7 @@
432432
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
433433
"type": "Datadog.Trace.ClrProfiler.Integrations.MongoDbIntegration",
434434
"method": "ExecuteAsync",
435-
"signature": "00 03 1C 1C 1C 1C"
435+
"signature": "00 04 1C 1C 1C 1C 08"
436436
}
437437
},
438438
{
@@ -452,7 +452,7 @@
452452
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
453453
"type": "Datadog.Trace.ClrProfiler.Integrations.MongoDbIntegration",
454454
"method": "ExecuteAsyncGeneric",
455-
"signature": "00 03 1C 1C 1C 1C"
455+
"signature": "00 04 1C 1C 1C 1C 08"
456456
}
457457
}
458458
]
@@ -479,7 +479,7 @@
479479
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
480480
"type": "Datadog.Trace.ClrProfiler.Integrations.ServiceStackRedisIntegration",
481481
"method": "SendReceive",
482-
"signature": "10 01 05 1E 00 1C 1D 1D 05 1C 1C 02"
482+
"signature": "10 01 06 1E 00 1C 1D 1D 05 1C 1C 02 08"
483483
}
484484
}
485485
]
@@ -506,7 +506,7 @@
506506
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
507507
"type": "Datadog.Trace.ClrProfiler.Integrations.StackExchange.Redis.ConnectionMultiplexer",
508508
"method": "ExecuteSyncImpl",
509-
"signature": "10 01 04 1E 00 1C 1C 1C 1C"
509+
"signature": "10 01 05 1E 00 1C 1C 1C 1C 08"
510510
}
511511
},
512512
{
@@ -528,7 +528,7 @@
528528
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
529529
"type": "Datadog.Trace.ClrProfiler.Integrations.StackExchange.Redis.ConnectionMultiplexer",
530530
"method": "ExecuteSyncImpl",
531-
"signature": "10 01 04 1E 00 1C 1C 1C 1C"
531+
"signature": "10 01 05 1E 00 1C 1C 1C 1C 08"
532532
}
533533
},
534534
{
@@ -550,7 +550,7 @@
550550
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
551551
"type": "Datadog.Trace.ClrProfiler.Integrations.StackExchange.Redis.ConnectionMultiplexer",
552552
"method": "ExecuteAsyncImpl",
553-
"signature": "10 01 05 1C 1C 1C 1C 1C 1C"
553+
"signature": "10 01 06 1C 1C 1C 1C 1C 1C 08"
554554
}
555555
},
556556
{
@@ -572,7 +572,7 @@
572572
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
573573
"type": "Datadog.Trace.ClrProfiler.Integrations.StackExchange.Redis.ConnectionMultiplexer",
574574
"method": "ExecuteAsyncImpl",
575-
"signature": "10 01 05 1C 1C 1C 1C 1C 1C"
575+
"signature": "10 01 06 1C 1C 1C 1C 1C 1C 08"
576576
}
577577
},
578578
{
@@ -594,7 +594,7 @@
594594
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
595595
"type": "Datadog.Trace.ClrProfiler.Integrations.StackExchange.Redis.RedisBatch",
596596
"method": "ExecuteAsync",
597-
"signature": "10 01 04 1C 1C 1C 1C 1C"
597+
"signature": "10 01 05 1C 1C 1C 1C 1C 08"
598598
}
599599
},
600600
{
@@ -616,7 +616,7 @@
616616
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
617617
"type": "Datadog.Trace.ClrProfiler.Integrations.StackExchange.Redis.RedisBatch",
618618
"method": "ExecuteAsync",
619-
"signature": "10 01 04 1C 1C 1C 1C 1C"
619+
"signature": "10 01 05 1C 1C 1C 1C 1C 08"
620620
}
621621
}
622622
]
@@ -641,7 +641,7 @@
641641
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
642642
"type": "Datadog.Trace.ClrProfiler.Integrations.WcfIntegration",
643643
"method": "HandleRequest",
644-
"signature": "00 03 02 1C 1C 1C"
644+
"signature": "00 04 02 1C 1C 1C 08"
645645
}
646646
}
647647
]
@@ -666,7 +666,7 @@
666666
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
667667
"type": "Datadog.Trace.ClrProfiler.Integrations.WebRequestIntegration",
668668
"method": "GetResponse",
669-
"signature": "00 01 1C 1C"
669+
"signature": "00 02 1C 1C 08"
670670
}
671671
},
672672
{
@@ -686,7 +686,7 @@
686686
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
687687
"type": "Datadog.Trace.ClrProfiler.Integrations.WebRequestIntegration",
688688
"method": "GetResponse",
689-
"signature": "00 01 1C 1C"
689+
"signature": "00 02 1C 1C 08"
690690
}
691691
},
692692
{
@@ -706,7 +706,7 @@
706706
"assembly": "Datadog.Trace.ClrProfiler.Managed, Version=1.2.0.0, Culture=neutral, PublicKeyToken=def86d061d0d2eeb",
707707
"type": "Datadog.Trace.ClrProfiler.Integrations.WebRequestIntegration",
708708
"method": "GetResponseAsync",
709-
"signature": "00 01 1C 1C"
709+
"signature": "00 02 1C 1C 08"
710710
}
711711
}
712712
]

reproductions/AutomapperTest/AutomapperTest.csproj

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,4 @@
1414
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.7.8" />
1515
</ItemGroup>
1616

17-
<ItemGroup>
18-
<ProjectReference Include="..\..\src\Datadog.Trace.ClrProfiler.Managed\Datadog.Trace.ClrProfiler.Managed.csproj" />
19-
</ItemGroup>
20-
21-
<ItemGroup>
22-
<None Include="..\..\src\Datadog.Trace.ClrProfiler.Native\bin\$(Configuration)\$(Platform)\**"
23-
CopyToOutputDirectory="Always"
24-
CopyToPublishDirectory="Always"
25-
Link="profiler-lib\%(RecursiveDir)\%(Filename)%(Extension)" />
26-
<Content Include="..\..\integrations.json"
27-
CopyToOutputDirectory="Always"
28-
CopyToPublishDirectory="Always"
29-
Link="profiler-lib\integrations.json" />
30-
</ItemGroup>
3117
</Project>
Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
11
<Project>
22
<PropertyGroup>
3+
<Platforms>x64;x86</Platforms>
4+
<PlatformTarget>$(Platform)</PlatformTarget>
35
<IsPackable>false</IsPackable>
46
<GenerateDocumentationFile>false</GenerateDocumentationFile>
7+
<ProfilerOutputDirectory>..\..\src\Datadog.Trace.ClrProfiler.Native\bin\$(Configuration)\$(Platform)</ProfilerOutputDirectory>
58
</PropertyGroup>
6-
</Project>
9+
10+
<ItemGroup>
11+
<ProjectReference Include="..\..\src\Datadog.Trace.ClrProfiler.Managed\Datadog.Trace.ClrProfiler.Managed.csproj" />
12+
</ItemGroup>
13+
14+
<ItemGroup>
15+
<None Include="$(ProfilerOutputDirectory)\*.dll;$(ProfilerOutputDirectory)\*.so;$(ProfilerOutputDirectory)\*.pdb"
16+
CopyToOutputDirectory="Always"
17+
CopyToPublishDirectory="Always"
18+
Link="profiler-lib\%(RecursiveDir)\%(Filename)%(Extension)" />
19+
<Content Include="..\..\integrations.json"
20+
CopyToOutputDirectory="Always"
21+
CopyToPublishDirectory="Always"
22+
Link="profiler-lib\integrations.json" />
23+
</ItemGroup>
24+
</Project>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFrameworks>netcoreapp2.2;netcoreapp2.1;netcoreapp2.0</TargetFrameworks>
6+
<TargetFrameworks Condition="'$(OS)' == 'Windows_NT'">$(TargetFrameworks);net461</TargetFrameworks>
7+
<Platforms>x64;x86</Platforms>
8+
<PlatformTarget>$(Platform)</PlatformTarget>
9+
</PropertyGroup>
10+
11+
</Project>

0 commit comments

Comments
 (0)