Watch, Follow, &
Connect with Us
Public Report
Report From: Delphi Prism/IDE    [ Add a report in this area ]  
Report #:  85886   Status: Open
"<PublicImplementationDetails>" used is defined in multiple assemblies
Project:  Embarcadero Prism Build #:  Prism 2011
Version:    1.1 Submitted By:   David Wachtel
Report Type:  Issue Date Reported:  7/2/2010 12:22:59 AM
Severity:    Commonly encountered problem Last Updated: 3/20/2012 2:24:39 AM
Platform:    All platforms Internal Tracking #:   277882
Resolution: None (Resolution Comments) Resolved in Build: : None
Duplicate of:  None
Voting and Rating
Overall Rating: No Ratings Yet
0.00 out of 5
Total Votes: None
Description
Per Karlo Kok's request I am this post to the QC Report log.

......................




So this is an odd one.

It seems that this is a newly introduced problem/bug with Delphi Prism 2011, as the same code compiles without error on Prism 2010.

I was eventually able to identify the offending code; the issue is with with some legacy code that relies heavily on the use of sets.

I've created a crappy work around that keeps me moving; but for the interested, here's how to simply and quickly re-create this problem:

1. Create 2 assemblies using the class template in VS (2008 or 2010).

2. In each assembly add the followings declarations:
a) in assembly1 - add the following
Type
enum1 = public enum(abc, def, ghi);
set1 = public set of enum1;
compile and create the assembly.
b) in assembly2 - add the following
Type
enum2 = public enum(jkl, mno, pqr);
set2 = public set of enum2;
compile and create the assembly.

3) Now using the VS template create a 3rd assembly and add the following
Type
enum3 = public enum(stu, vwx, yz);
set3 = public set of enum3;
Now add, Assembly1 and Assembly2 as references in the Assembly 3 project.

When you (or when I) try build Assembly 3; I get the folllowing compilation/build error:
Error
1
(CE73) Type "<PublicImplementationDetails>" used is defined in multiple assemblies (Assembly1, Assembly2)
C:\Program Files (x86)\MSBuild\RemObjects Software\Oxygene\RemObjects.Oxygene.targets
167
5
Assembly3

I am not happy with my workaround; I moved all the set and enum declarations into a single assembly and it now builds without an issue but this is not desirable so I'd really like to get some help on how to better move forward.
Steps to Reproduce:
here's how to simply and quickly re-create this problem:

1. Create 2 assemblies using the class template in VS (2008 or 2010).

2. In each assembly add the followings declarations:
a) in assembly1 - add the following
Type
enum1 = public enum(abc, def, ghi);
set1 = public set of enum1;
compile and create the assembly.
b) in assembly2 - add the following
Type
enum2 = public enum(jkl, mno, pqr);
set2 = public set of enum2;
compile and create the assembly.

3) Now using the VS template create a 3rd assembly and add the following
Type
enum3 = public enum(stu, vwx, yz);
set3 = public set of enum3;
Now add, Assembly1 and Assembly2 as references in the Assembly 3 project.

When you (or when I) try build Assembly 3; I get the folllowing compilation/build error:
Error
1
(CE73) Type "<PublicImplementationDetails>" used is defined in multiple assemblies (Assembly1, Assembly2)
C:\Program Files (x86)\MSBuild\RemObjects Software\Oxygene\RemObjects.Oxygene.targets
167
5
Assembly3
Workarounds
I am not happy with my workaround; I moved all the set and enum declarations into a single assembly and it now builds without an issue but this is not desirable so I'd really like to get some help on how to better move forward.
Attachment
None
Comments

None

Server Response from: ETNACODE01