对于用户授权,我只想为每个用户包含一个特定的模块。所以我像这样配置了条件编译
<DefineConstants>TRACE;DEBUG;SAMPLECONSTANT1</DefineConstants>
并编辑了这样的项目文件:
<ProjectReference Include="..\Solution1.Modules.Module1\Solution1.Modules.Module1.csproj" Condition="$(DefineConstants.Contains('SAMPLECONSTANT1'))">
<Project>{4E378BD0-4FF8-4160-9331-1ECBFD2B6F30}</Project>
<Name>Solution1.Modules.Module1</Name>
</ProjectReference>
对于这种情况,如果Module1
包含DefineConstants
,我想添加对项目SAMPLECONSTANT1
的引用;但无论我放在DefineConstants
中,解决方案总是加载Module1
项目。我在这做错了什么?
更新:其实我的代码是正确的。请参阅J0e3gan的回答。 Visual Studio UI不反映项目的References
文件夹中的条件引用。因此,在任何给定配置或平台选择中都可以看到所有引用。另一方面,编译器和IntelliSense知道条件引用,在构建期间通过视觉反馈和错误通知来表达正确的设置。
答案 0 :(得分:21)
我怀疑问题在于您要将项目参考调整为Module1
,而不是在解决方案中包含 Module1
。< / p>
在解决方案中包含项目(因此将其与解决方案一起加载)以及在解决方案中引用另一个项目的项目当然是两个不同的事情。
<强>更新强>
如果你真的想要一个项目引用,Joe Wrobel写了a related blog post应该有所帮助。关键点是将包含ItemGroup
的{{1}}包裹在ProjectReference
元素中 - 例如:
Choose
从我今天晚上的测试中,这对于确定是否定义了像<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>
这样的常量的项目引用很有用。但是, note 条件项目引用在(可能)引用项目的References文件夹下的解决方案资源管理器中不显示 - 无论是否调节常数被定义。
要了解条件是否有效,我必须构建:并定义SAMPLECONSTANT1
,引用项目已成功构建使用SAMPLECONSTANT1
中定义的类 - 如预期的那样;并且未定义Module1
时,引用项目无法构建,因为无法解析SAMPLECONSTANT1
中定义的类 - 也是预期的。
答案 1 :(得分:1)
接受的答案对我不起作用。但是,我并不暗示它是不正确的。对我有用的是:
>>> import re
>>>
>>> var = 'column1;column2;column3\r\nval1;val2;val3\r\n;val4;val5;val6\r\n'
>>> new_text = re.sub(r'(?<!column3)\r\n', r'temp\r\n', var)
>>> new_text
'column1;column2;column3\r\nval1;val2;val3temp\r\n;val4;val5;val6temp\r\n'
>>>
更改常量时没有任何错误。
答案 2 :(得分:0)
如果您想使用 DEBUG 常量,请确保在您的项目属性中启用它(Properteis > Build > Define DEBUG Constant)。
基于接受答案的样本:
<Choose>
<When Condition="$(DefineConstants.Contains('DEBUG'))">
<ItemGroup>
<ProjectReference Include="..\..\..\..\..\MyLocalProjectPath.csproj" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="MyNugetPackage" Version="2.1.4" />
</ItemGroup>
</Otherwise>
</Choose>