I’ve a same project that need to be compiled with .NET and Compact .NET Framework.
- It is possible to create a C#
compiler that will compile my
project with both framework ? -
Some feature aren’t present in
CF.NET Framework so I created it by
myself (creating classes having
exactly the same name & options that
in .NET Framework. If I decore this
classes with an attribute like
[CF35] it’s possible to parse the
project and :- Use this class when compile the
project using CF.NET - Ignore this class when compile the project using
.NET
- Use this class when compile the
?
Thanks for all constructive answers.
[EDIT]
I know the solution that consists to create two projects referencing the same files.
Problem is, you should every time compile both manually.
Moreover, when you add a file to one, you need to open the second and reference it too, that it’s just borring to do and according that we are many people to work on the same project, I would like to do this part automatically.
Seems to be possible?
[EDIT 2]
All works fine except … resources files !
So, to resume, I’ve three project :
- the development project (CF.NET)
- the release project (CF.NET 3.5), including all files via “”
- the release project (NET 3.5), including all files via “”
As said, all works fine, but now my problem is using Resources files.
What’s the method to apply to use it?
- When I use the development project, Resource file is correctly retrieved
- When I use the two other projects, ResourceManager throws MissingManifestResourceException
Any idea?
The basic idea would be to decorate your code with #if compiler directives for each framework version?
From here one you have two options:
A) 1 project file with custom build configurations
If you would like to have everything in 1 csproj file you’ll need to modify it manually. Since this is a msbuild file this is more of a msbuild problem. I figure you would need to do the following things:
Define CF constant (From now on Edit csproj):
<PropertyGroup Condition="'$(Platform)' == 'CF'"><DefineConstants>CF</DefineConstants>
</PropertyGroup>
Import correct build targets depending on selected platform:
<Import Condition="'$(Platform)' == 'NET'" Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /><Import Condition="'$(Platform)' == 'CF'" Project="$(MSBuildToolsPath)\<CFtargets>.targets" />
I don’t know the targets file name of CF since I don’t have it installed. It sould be somewhere in
C:\Windows\Microsoft.NET\**.targetsB) 2 project files each containing the appropriate build configuration
As I initially pointed out, and also some commenter pointed out, the best solution is to have 2 project files, that you keep in sync. You can have the same source files in both project files.
So an idea would be (instead of copying the file list manually each time) to
modify the two csproj files and use a wildcard compile tag like this:
<Compile Include="**/*.cs"/>