Many times, we need to refer to dll,32 bits (X86) and 64-bit (X64) under different platforms. If the platform is wrong, a BadImageFormatException exception is thrown in C # that fails to load or assembly.
Solution Ideas
We cannot add DLLs under different platforms at the same time, even if the names are not the same (the datagram type exists in two DLLs at the same time). Can it be referenced only on some platform and not in other platforms?
We know that the configuration of the VS project is saved in the configuration file (. csproj). In VS, find the appropriate item, right-click the Unload project, and when finished, the project turns gray, similar to. Then right-click on the item and check edit (project name). csproj. We can look at the VS engineering file. Such as:
In which we were pleasantly surprised to find condition= "' $ (Configuration) |$ (Platform) ' = = ' debug| AnyCPU ' ". We suspect that $ (Platform) is a specific platform, including AnyCPU, X86, X64. The condition represents the condition. We can verify this by modifying the configuration in Debug and release scenarios (which can be modified in the Build tab of the project's properties).
Looking further down the project file, we found:
This is the DLL we referenced in the VS project, so let's try to set condition in it, and the answer is yes.
Then we try to add different conditions on different platforms, such as:
After verification, we found that success ...
In 64-bit cases, in 32-bit cases.
Extended
condition except can use = =, can also use!=,<, <=, >=, and other relational operators,!,and,or and other logical operators, see MSBuild Conditions.
The VS Project file contains the properties (defined in
PropertyGroup中)
and itemgroups (defined in ItemGroup) two types of variables. $ (PropertyName) can refer to all definitions in the
PropertyGroup中的变量,详见
simple introduction and use of MSBuild
。
At the bottom of the VS project file is a line of commented code, which is known as pre-build and post-build events
For more information about MSBuild, you can view MSDN-related documentation for your interest.
Platform and platform goals
Platform refers to the platform defined in Configuration Manager (located under the Build menu), which corresponds to the platform
The platform target is the target platform set in the project build properties, corresponding to the Platformtarget
Applications in C + +
Not tested in C + +, it should, in principle, be an entry added in the project file after adding a library directory in C + +.
Which friend has tested, please advise, grateful
C # DLL reference problem on different platforms