我有两个项目和一个解决方案文件:
c:\dev\base\proja\proja.vbproj
c:\dev\base\proja\myfile1.aspx
c:\dev\base\proja\myfile1.aspx.vb
c:\dev\base\proja\myfile1.aspx.vb.designer
c:\dev\base\proja\myfile2.aspx
c:\dev\base\proja\myfile2.aspx.vb
c:\dev\base\proja\myfile2.aspx.vb.designer
和
c:\dev\base\projb\mysln.sln
c:\dev\base\projb\projb.vbproj
c:\dev\base\projb\myfile2.aspx
c:\dev\base\projb\myfile2.aspx.vb
c:\dev\base\projb\myfile2.aspx.vb.designer
proja.vbproj
是基础项目,而projb.vbproj
旨在导入proja.vbproj
并覆盖myfile2.aspx etc
个文件。
proja.vbproj
看起来像这样:
[...]
<Compile Include="myfile1.aspx.vb">
<SubType>ASPXCodebehind</SubType>
<DependentUpon>myfile1.aspx</DependentUpon>
</Compile>
<Compile Include="myfile2.aspx.vb">
<SubType>ASPXCodebehind</SubType>
<DependentUpon>myfile2.aspx</DependentUpon>
</Compile>
[...]
<Content Include="myfile1.aspx" />
<Content Include="myfile2.aspx" />
[...]
而projb.vbproj
看起来像这样:
[...]
<Import Project="$(ProjectDir)..\proja\proja.vbproj" />
[...]
<Compile Include="myfile2.aspx.vb">
<SubType>ASPXCodebehind</SubType>
<DependentUpon>myfile2.aspx</DependentUpon>
</Compile>
[...]
<Content Include="myfile2.aspx" />
[...]
projb.vbproj
旨在覆盖proja.vbproj
的自定义文件 - 提供维护项目的单个规范化位置,同时允许针对每个站点的自定义进行特定覆盖。
当我在Visual Studio 2013中加载projb.vbproj
并尝试构建它时,会出现问题。它会引发大量错误,因为它无法解析位于myfile1.aspx
中proja.vbproj
和相关文件的位置。这似乎是因为导入的路径是相对于projb.vbproj
位置而不是proja.vbproj
文件位置。
我已尝试将$(MSBuildProjectDirectory)
预先附加到proja.vbproj
中的所有文件 - 但这并不能解决问题,因为我认为$(MSBuildProjectDirectory)
是根据项目的上下文设置的正在被开放而不是进口。
我不想将整个myproja.vbproj
文件内容复制到myprojb.vbproj
只是为了覆盖一个文件 - 这看起来很混乱,并且反对看似以继承为中心的msbuild方法,但也许我是这里错了......
有没有办法完成我追求的目标?那是;使用另一个项目的文件位置覆盖某个项目的某些文件位置,而不必复制整个项目文件?
答案 0 :(得分:1)
您尝试重复使用项目的某些部分是一件好事,但是您采用的方式有一些缺点(如果您的项目增长,它们只会变得更大):
$(MsBuildThisFileDirectory)
解决此问题,但这意味着无论何时Visual Studio将文件添加到项目中,您都必须再次应用此修复程序Compile Include=aaa
,则将 aaa添加到编译列表中。即使它已经存在了。所以你没有在这里覆盖任何东西,你只是添加到项目a中包含的文件。不确定这是不是你想要的?你能做什么呢?
例如:
<!-- 500+ Common Files -->
<Compile Include="myfile1.aspx.vb"/>
<Compile Include="myfile2.aspx.vb"/>
<!-- Some Specific Files -->
<Compile Include="customfile1.aspx" Condition="'$(Configuration)'=='ReleaseCustom1'"/>
<Compile Include="customfile2.aspx" Condition="'$(Configuration)'=='ReleaseCustom2'"/>