我有一个项目,其中包含多个项目使用的公共文件,并希望使用MSBuild Import来使用该项目。
以下是* .csproj的片段,其中包含我之后的内容。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
***<Import Project="My.commonFiles.csproj" />
<PropertyGroup>***
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
我无法找到任何参考如何在VS 2015中实现这一点。从逻辑上讲,我认为我会右键单击Project |单击添加|单击现有项|并选择项目,但这不起作用。
我真的不想手动编辑* .csproj。有什么帮助吗?
答案 0 :(得分:0)
您必须手动编辑.csproj
。 Visual Studio 2017具有编辑项目文件而无需卸载的功能,但目前只能only applies to certain project types。
另一个令人沮丧的是,在关闭并重新打开解决方案之前,Visual Studio 2015通常甚至不会对导入的文件进行更改。 (这促使我为我的团队自定义Visual Studio扩展程序添加了一项功能,可以检测到这些更改,并提示您只需单击一下即可重新加载解决方案。不幸的是,我没有将这些功能隔离并可用于共享在Visual Studio库中。)在某些情况下,我通过使用MSBuild
任务代替Import
元素来解决这个问题,并沿着这些方向进行:
<MSBuild Projects="DESIRED_FILE.targets"
Targets="DESIRED_TARGET"
Properties="Configuration=$(Configuration);
Platform=$(Configuration);
Verbosity=$(Verbosity);
SomeOtherProperty=$(SomeOtherProperty)" />
但是,由于MSBuild
任务会生成一个单独的进程,因此它只对执行Targets有用 - 而不是用于填充常见属性或您似乎尝试过的项目。对不起,答案太令人失望了!
顺便说一句,为了避免混淆,您可能希望使用以下扩展名之一来命名您创建的任何MSBuild文件,如果.csproj
:
.props
如果文件包含PropertyGroup
和ItemGroup
个元素,并且需要放在导入文件的顶部附近.targets
(或者有时会使用.proj
)如果它包含Target
个元素并且应该放在消费文件的底部附近