我有两个项目:Lib
和Exe
.
项目Lib
生成一些文件PostBuildEvent
到$(TargetDir)
. 假设它是
echo Foo > $(TargetDir)\Readme.txt
Exe
设置为Lib
的引用。Copy Local
True
不幸的是,没有文件被复制到Exe
的输出目录。
我如何教 VS/MSBuild 复制我的文件,就像它复制项目项一样Copy to Output Directory
?
我有两个项目:Lib
和Exe
.
项目Lib
生成一些文件PostBuildEvent
到$(TargetDir)
. 假设它是
echo Foo > $(TargetDir)\Readme.txt
Exe
设置为Lib
的引用。Copy Local
True
不幸的是,没有文件被复制到Exe
的输出目录。
我如何教 VS/MSBuild 复制我的文件,就像它复制项目项一样Copy to Output Directory
?
我认为如果您AfterBuild
在项目的 Visual Studio 项目文件中添加一个目标,Exe
如下所示:
<Target Name="AfterBuild">
<ItemGroup>
<LibProject Include="$(LibProjectDirectory)\Lib.csproj"/>
</ItemGroup>
<ItemGroup>
<LibOutput Include="%(LibProject.RootDir)%(LibProject.Directory)\bin\$(Configuration)\*" />
</ItemGroup>
<Copy SourceFiles="@(LibOutput)" DestinationFolder="$(OutputPath)" />
</Target>
这假设Lib
项目输出将转到默认位置%(LibProject.RootDir)%(LibProject.Directory)\bin\$(Configuration)
. 如果配置不同,则需要相应地更新LibOutput
Item 的Include
参数。
您不能,至少不能直接知道:msbuild 不会,也绝对不应该知道您在构建后事件中创建文件,更不用说它会处理它们了。
要么直接在它们应该结束的地方创建它们,要么在 Exe 项目中添加一个额外的构建后事件来复制文件。在这两种情况下,将公共输出目录定义为 msbuild 文件中的属性并将该文件导入两个项目中都很方便,因此两者都可以引用该属性。