我有一个XSD文件(DTD),我运行XSD工具来生成一个C#文件。我在以下两个地方修改了我的csproj的msbuild文件:
为项目组添加了特殊类型:
<ItemGroup>
<SchemaFiles Include="Data\DeepZoomSchema.xsd">
</SchemaFiles>
</ItemGroup>
然后在文件的底部:
<Target Name="BeforeBuild" Inputs="@(SchemaFiles)" Outputs="@(SchemaFiles->'$(IntermediateOutputPath)%(Filename).cs')">
<XSD Language="CS" GenerateFromSchema="classes" SuppressStartupBanner="false" Namespace="DZParallelLib.Data" Sources="@(SchemaFiles)" AdditionalOptions="/out:$(IntermediateOutputPath)" />
<ItemGroup>
<Compile Include="@(SchemaFiles->'$(IntermediateOutputPath)%(Filename).cs')">
</Compile>
</ItemGroup>
</Target>
首先,这个项目现在编译得很好。所以我想我已经完成了很多困难。但是,intellisense在从不解析DeepZoomSchema.cs输出文件的意义上被打破了。
在我的理想世界中,从VS2012 IDE,我希望找到并解析.cs文件。我找到了一种方法来做到这一点,其中包括:
<ItemGroup>
<SchemaFiles Include="Data\DeepZoomSchema.xsd">
</SchemaFiles>
</ItemGroup>
<ItemGroup>
<Compile Include="@(SchemaFiles->'$(IntermediateOutputPath)%(Filename).cs')">
<Visible>False</Visible>
</Compile>
</ItemGroup>
然后构建步骤变得更加简单:
<UsingTask TaskName="XSD" AssemblyName="Microsoft.Build.CppTasks.Common, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<Target Name="BeforeBuild" Inputs="@(SchemaFiles)" Outputs="@(SchemaFiles->'$(IntermediateOutputPath)%(Filename).cs')">
<XSD Language="CS" GenerateFromSchema="classes" SuppressStartupBanner="false" Namespace="DZParallelLib.Data" Sources="@(SchemaFiles)" AdditionalOptions="/out:$(IntermediateOutputPath)" />
</Target>
现在IDE已正确解析(解决方案仍在构建),但感觉不对。当我过去编写MS构建规则时(我承认,我没有做很多)我总是将中间输出文件放在构建规则中(正如我之前所做的那样)。此外,感觉我应该在这里使用“DependentUpon”标签,并使它们可见,只是在IDE中默认不显示(有点像代码隐藏文件??)。基本上,第一个解决方案感觉它是“正确的”方式,但IDE不喜欢它。
所以,我的问题是:有没有比我描述的第二种解决方案更好的方法来获得我想做的事情?