visual studio 2010 conditional references
You should be able to do this with conditional constructs by editing the project file directly (VS IDE won't do this for you).
For example, you might do something like this using the "Choose" element:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<PropertyGroup>
<!-- ... -->
</PropertyGroup>
<Choose>
<When Condition=" '$(Configuration)'=='Debug' ">
<ItemGroup>
<ProjectReference Include="..\stuff\MyStuff.csproj">
<Project>{4c7bbe47-8d84-45d4-95f0-f640ba59563c}</Project>
<Name>MyStuff</Name>
</ProjectReference>
</ItemGroup>
</When>
<When Condition=" '$(Configuration)'=='Retail' ">
<ItemGroup>
<Reference Include="MyStuff.dll" />
</ItemGroup>
</When>
</Choose>
<!-- Rest of Project -->
</Project>
MSDN has more information about using conditional constructs.
Visual Studio conditional project reference based on a constant
I suspect the problem is that you are conditioning a project reference to Module1
, not whether to include Module1
in the solution.
Including a project in a solution (and hence loading it with the solution) and a project referencing another project in a solution are two different things of course.
UPDATE:
If you truly want to condition a project reference, Joe Wrobel wrote a related blog post that should help. The key takeaway is to wrap the ItemGroup
that contains the ProjectReference
to condition in a Choose
element - for example:
<Choose>
<When Condition="$(DefineConstants.Contains('SAMPLECONSTANT1'))">
<ItemGroup>
<ProjectReference Include="..\Solution1.Modules.Module1\Solution1.Modules.Module1.csproj">
<Project>{4E378BD0-4FF8-4160-9331-1ECBFD2B6F30}</Project>
<Name>Solution1.Modules.Module1</Name>
</ProjectReference>
<!-- other ProjectReference elements -->
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<!-- other ProjectReference elements -->
</ItemGroup>
</Otherwise>
</Choose>
From my tests this evening, this works great to condition a project reference(s) on whether a constant like SAMPLECONSTANT1
is defined. However, note that conditioned project references do not show in Solution Explorer under the (would-be) referencing project's References folder - regardless whether the conditioning constant is defined.
To see that the conditioning worked, I had to build: with SAMPLECONSTANT1
defined, the referencing project built successfully while using a class defined in Module1
- as expected; and without SAMPLECONSTANT1
defined, the referencing project failed to build because the class defined in Module1
could not be resolved - also as expected.
conditional references in visual studio - how to define the customized variable
I'm not completely sure if there is a way to do that in Visual studio.
If you are running the build from msbuild directly you can use /P:ReleaseType=INTERNAL_RELEASE.
In my project I ended up changing Configuration property and instead of having it as Debug and Release I have more values like , DEV,QA,STAGE, etc...
Conditional Reference
Not sure whether I understand term "reference a class".
You can do a conditional referencing of an entire Assembly (DLL)
<Reference
Include="LegacyServices.dll"
Condition="$(AppVersion == '2.0')" />
or conditionally include a source file into a project
<Compile
Include="LegacyServices.cs"
Condition="$(AppVersion == '2.0')" />
Both using MSBuild Condition in csproj file.
How do I execute a line conditionally in Visual Studio 2010?
Do you mean when a debugger is attached? If so, you could do something like this:
#if DEBUG
if (Debugger.IsAttached)
{
//Your code here
}
#endif
This will only run when the debugger is attached, such as running with F5. Double clicking it or using Ctrl+F5 won't cause the if
statement to be hit. It's also wrapped in a conditional so then when you compile to release the code is not even there.
Visual Studio 2010 Compiling with the Debug or Release version of third party library depending on if my project is being compiled Build or Release?
You can edit the csproj file manually set the Condition attribute on the ItemGroup containing the reference.
<ItemGroup Condition="'$(Configuration)' == 'Debug'">
<Reference Include="MyLib">
<HintPath>..\..\Debug\MyLib.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)' == 'Release'">
<Reference Include="MyLib">
<HintPath>..\..\Release\MyLib.dll</HintPath>
</Reference>
</ItemGroup>
See this article for a bit more information.
Related Topics
How to Implement Solid Principles into an Existing Project
Show Controls Added Programmatically in Winforms App in Design View
Use Task.Run() in Synchronous Method to Avoid Deadlock Waiting on Async Method
Ef Data Context - Async/Await & Multithreading
Looking for a Command Line Argument Parser for .Net
Find the Next Tcp Port in .Net
Static Property Using Inotifypropertychanged. C#
Find Methods That Have Custom Attribute Using Reflection
When Using a Settings.Settings File in .Net, Where Is the Config Actually Stored
Read Appsettings JSON Values in .Net Core Test Project
Cssrewriteurltransform with or Without Virtual Directory
How to Make Chrome Headless After I Login Manually
How to Return 401 Instead of 302 in ASP.NET Core
How to Determine the Length (I.E. Duration) of a .Wav File in C#
"An Internal Error Occurred." When Loading Pfx File with X509Certificate2
How to Solve Disturbance in My Bot in C#
How to Show a Image in Database in the Image Control of ASP.NET