我有两个项目:Lib和Exe.
项目Lib生成一些文件PostBuildEvent 到$(TargetDir). 假设它是
echo Foo > $(TargetDir)\Readme.txt
Exe设置为Lib的引用。Copy LocalTrue
不幸的是,没有文件被复制到Exe的输出目录。
我如何教 VS/MSBuild 复制我的文件,就像它复制项目项一样Copy to Output Directory?
我有两个项目:Lib和Exe.
项目Lib生成一些文件PostBuildEvent 到$(TargetDir). 假设它是
echo Foo > $(TargetDir)\Readme.txt
Exe设置为Lib的引用。Copy LocalTrue
不幸的是,没有文件被复制到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). 如果配置不同,则需要相应地更新LibOutputItem 的Include参数。
您不能,至少不能直接知道:msbuild 不会,也绝对不应该知道您在构建后事件中创建文件,更不用说它会处理它们了。
要么直接在它们应该结束的地方创建它们,要么在 Exe 项目中添加一个额外的构建后事件来复制文件。在这两种情况下,将公共输出目录定义为 msbuild 文件中的属性并将该文件导入两个项目中都很方便,因此两者都可以引用该属性。