如何使用相对文件路径从另一个 msbuild 项目导入 msbuildcommunitytasks 项目?
请放轻松,我是 msbuild 和 msbuildtasks 的新手!
如何设置表示我要导入的目标文件的相对文件路径的属性?我需要相关参考,以便它可以在所有开发机器上运行。但是导入的目标试图在内部使用相对文件路径,这将不起作用,因为它是相对于导入的目标重新评估的!
实际上,我正在尝试解决导入项目的记录的行为:
导入的所有相对路径 项目的解释是相对于 导入项目的目录。 因此,如果项目文件是 导入到多个项目文件中 不同地点,相对 导入的项目文件中的路径 将被不同地解释为 每个导入的项目。
Please go easy I am new to msbuild and msbuildtasks!
How can I set a property which represents a relative file path to a targets file which I want to import? I need relative references so it will work on all dev machines. But the target for import is trying to use the relative file path internally, which won't work as it is re-evaluated relative to the imported target!
Effectively I am trying to work around the documented behaviour of imported projects:
All relative paths in imported
projects are interpreted relative to
the directory of the imported project.
Therefore, if a project file is
imported into several project files in
different locations, the relative
paths in the imported project file
will be interpreted differently for
each imported project.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
是否可以在不安装的情况下使用 MSBuild 扩展包? 上有类似的问题。这个问题是如何对 MSBuild Extension Pack 执行相同操作,两者在这方面都很相似。对于扩展包,您必须声明属性 ExtensionTasksPath,对于社区任务,您必须声明一个名为 MSBuildCommunityTasksLib 的类似属性。所以在你的情况下它应该看起来像:
There was a similar question at Is it possible to use MSBuild Extension Pack without installation?. That question was how to do the same with the MSBuild Extension Pack, both of which are similar in this aspect. For the Extension Pack you have to declare the property ExtensionTasksPath,and for the Community tasks you have to declare a similar property named MSBuildCommunityTasksLib. So in your case it should look like:
好的,我找到了答案。本质上,您必须将属性 MSBuildCommunityTasksPath 设置为返回原始包含目录的相对路径。
例如,给定如下文件夹结构:
Where :
{My msbuild project} is in Root\Project\Build\
{MSbuildCommunityTasks} is in Root\Project\Tools\MsBuildCommunityTasks
要让目标项目通过属性 MSBuildCommunityTasksPath 引用其二进制文件,它将找到如下任务文件:
然后您可以使用另一个相对文件引用导入目标文件:
Ok, I've found the answer. Essentially you have to set the property MSBuildCommunityTasksPath as a relative path back to the original containing directory.
For example, given a folder structure like this:
Where :
{My msbuild project} is in Root\Project\Build\
{MSbuildCommunityTasks} is in Root\Project\Tools\MsBuildCommunityTasks
To get the targets project to reference its binaries via the property MSBuildCommunityTasksPath, it will find the tasks file like this:
Then you can import the targets file with another relative file reference :
@Sayed Ibrahim Hashimi
谈论 MSBuild4
仅声明 MSBuildCommunityTasksLib 是不够的,因为如果您检查 MSBuild.Community.Tasks.Targets 文件,则属性声明如下
因此,如果您仅覆盖 MSBuildCommunityTasksLib,它将再次在 MSBuild.Community.Tasks.Targets 文件中被覆盖,如下所示这不是有条件的
因此,您还必须覆盖 MSBuildCommunityTasksPath,以便其属性不是从 MSBuildExtensionsPath 设置,而是从您的自定义路径设置。
如果我错了请纠正我
@Sayed Ibrahim Hashimi
Talkin about MSBuild4
Just declaring the MSBuildCommunityTasksLib wont suffice cause if u check the MSBuild.Community.Tasks.Targets file the properties are declared as follows
So if U only over ride the MSBuildCommunityTasksLib it will again get over ridden in the MSBuild.Community.Tasks.Targets file as it is not conditional
So u HAVE TO ALSO OVERRIDE MSBuildCommunityTasksPath so that its proerty is NOT SET FROM MSBuildExtensionsPath but from ur custom path.
Correst me if I m wrong
这似乎是一个答案:
http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/feb782e3-72ae-4476-9011-617796f217b6
但这(如果我理解正确的话)似乎很荒谬解决方案。为了获得工作路径,我需要更改导入的项目引用吗?如果我想引用另一个文件夹中的第三个项目导入的项目,会发生什么?!?
This appears to be one answer:
http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/feb782e3-72ae-4476-9011-617796f217b6
But this (if I understand it correctly) appears to be a ridiculous solution. To get the paths to work I need to change the imported project references? What would happen if I wanted to reference the imported project from third project in another folder?!?
如果我很诚实的话,我是 msbuild 的菜鸟,但我刚刚解决了我自己的问题。我正在将其中一个目标转变为自己的项目,但它没有找到 msbuild 社区路径的路径。如果您查看原始项目,您可能会发现类似的内容
将此代码复制到您的新项目中,它应该可以工作。
I'm a noob at msbuild if I'm quite honest however I've just solved my own problem I had with this. I was turning one of the targets into its own project and it wasn't finding the paths for the msbuild community paths. If you look at your original project you may find something like this
Copy this code into your new project and it should work.
我只是想补充一点,因为我无法评论(代表),要为您的特定项目指定路径,您可以在属性组上使用 $(SolutionDir),如下所示:
$(SolutionDir)\My Code\Community\MSBuild\CommunityTasks \
这样,它就不会绑定到特定驱动器,并且可以基于项目相对于解决方案目录结构的位置。
还要感谢上面的答案,它通过上面的添加帮助我完成了我的项目。
I just wanted to add, since i cannot comment (rep), that to do a path to your particular project you can use $(SolutionDir) on your property group like so:
$(SolutionDir)\My Code\Community\MSBuild\CommunityTasks\
This way its not tied down to a specific drive and can be based off of the location of the project relative to your solutions directory structure.
Also thanks for the answer above it helped me in my project with the addition above.