@@ -114,10 +114,17 @@ Copyright (c) .NET Foundation. All rights reserved.
114
114
115
115
<UsingTask TaskName =" CheckForDuplicateItems" AssemblyFile =" $(MicrosoftNETBuildTasksAssembly)" />
116
116
117
- <Target Name =" CheckForDuplicateItems" BeforeTargets =" _CheckForInvalidConfigurationAndPlatform" >
117
+ <Target Name =" CheckForDuplicateItems" BeforeTargets =" _CheckForInvalidConfigurationAndPlatform;CoreCompile " >
118
118
119
119
<PropertyGroup >
120
120
<DefaultItemsMoreInformationLink >https://aka.ms/sdkimplicititems</DefaultItemsMoreInformationLink >
121
+
122
+ <!-- For the design-time build, we will continue on error and remove the duplicate items.
123
+ This is because otherwise there won't be any references to pass to the compiler, leading to design-time
124
+ compilation errors for every API that is used in the project. Amidst all the compile errors, it would
125
+ be easy to miss the duplicate items error which is the real source of the problem. -->
126
+ <CheckForDuplicateItemsContinueOnError >false</CheckForDuplicateItemsContinueOnError >
127
+ <CheckForDuplicateItemsContinueOnError Condition =" '$(DesignTimeBuild)' == 'true'" >ErrorAndContinue</CheckForDuplicateItemsContinueOnError >
121
128
</PropertyGroup >
122
129
123
130
<CheckForDuplicateItems
@@ -127,7 +134,9 @@ Copyright (c) .NET Foundation. All rights reserved.
127
134
DefaultItemsOfThisTypeEnabled =" $(EnableDefaultCompileItems)"
128
135
PropertyNameToDisableDefaultItems =" EnableDefaultCompileItems"
129
136
MoreInformationLink =" $(DefaultItemsMoreInformationLink)"
130
- />
137
+ ContinueOnError =" $(CheckForDuplicateItemsContinueOnError)" >
138
+ <Output TaskParameter =" DeduplicatedItems" ItemName =" DeduplicatedCompileItems" />
139
+ </CheckForDuplicateItems >
131
140
132
141
<CheckForDuplicateItems
133
142
Items =" @(EmbeddedResource)"
@@ -136,17 +145,36 @@ Copyright (c) .NET Foundation. All rights reserved.
136
145
DefaultItemsOfThisTypeEnabled =" $(EnableDefaultEmbeddedResourceItems)"
137
146
PropertyNameToDisableDefaultItems =" EnableDefaultEmbeddedResourceItems"
138
147
MoreInformationLink =" $(DefaultItemsMoreInformationLink)"
139
- />
148
+ ContinueOnError =" $(CheckForDuplicateItemsContinueOnError)" >
149
+ <Output TaskParameter =" DeduplicatedItems" ItemName =" DeduplicatedEmbeddedResourceItems" />
150
+ </CheckForDuplicateItems >
140
151
141
- <!-- TODO: Do we check for duplicate content items here, or in the Web SDK? EnableDefaultContentItems isn't defined or used at all by the .NET SDK -->
152
+ <!-- Default content items are enabled by the Web SDK, not the .NET SDK, but we check it here for simplicity -->
142
153
<CheckForDuplicateItems
143
154
Items =" @(Content)"
144
155
ItemName =" Content"
145
156
DefaultItemsEnabled =" $(EnableDefaultItems)"
146
157
DefaultItemsOfThisTypeEnabled =" $(EnableDefaultContentItems)"
147
158
PropertyNameToDisableDefaultItems =" EnableDefaultContentItems"
148
159
MoreInformationLink =" $(DefaultItemsMoreInformationLink)"
149
- />
160
+ ContinueOnError =" $(CheckForDuplicateItemsContinueOnError)" >
161
+ <Output TaskParameter =" DeduplicatedItems" ItemName =" DeduplicatedContentItems" />
162
+ </CheckForDuplicateItems >
163
+
164
+ <ItemGroup Condition =" '$(DesignTimeBuild)' == 'true' And '@(DeduplicatedCompileItems)' != ''" >
165
+ <Compile Remove =" @(Compile)" />
166
+ <Compile Include =" @(DeduplicatedCompileItems)" />
167
+ </ItemGroup >
168
+
169
+ <ItemGroup Condition =" '$(DesignTimeBuild)' == 'true' And '@(DeduplicatedEmbeddedResourceItems)' != ''" >
170
+ <EmbeddedResource Remove =" @(EmbeddedResource)" />
171
+ <EmbeddedResource Include =" @(DeduplicatedEmbeddedResourceItems)" />
172
+ </ItemGroup >
173
+
174
+ <ItemGroup Condition =" '$(DesignTimeBuild)' == 'true' And '@(DeduplicatedContentItems)' != ''" >
175
+ <Content Remove =" @(Content)" />
176
+ <Content Include =" @(DeduplicatedContentItems)" />
177
+ </ItemGroup >
150
178
151
179
</Target >
152
180
</Project >
0 commit comments